一、JSP(很少使用)

理解:
SSM的模板,传统模式还可以使用,前后端分离不可以使用
发展—servlet的升级(java为主)—JSP(HTML为主)
开始用于做动态网站,现在仅仅是模板,被替代
JSP本质依旧是Java,由容器翻译成.java文件,后编译为.class文件,就可以在虚拟机中运行。文件放在tomcat的work路径下
在这里插入图片描述
更改HTML困难

(1). JSP原理

  • jsp页面 = (html+css+js) + Java脚本(<%%>)
  • jsp -> 翻译 .java -> 编译 .class (tomcat/work路径下)
    在这里插入图片描述
    第一次已经翻译编译过所以第二次之后不再翻译编译,速度变快(同servlet)

(2)JSP七个组成部分

JSP=静态内容+Java代码(小脚本)

1. HTML静态内容 HTML + CSS +JS】

脚本:<% %>

2. 指令<%@keyword %>
  • page : 必须有的指令,在jsp页面的第一行可以拆分多个page。定义页面属性数据。
  • include:包含,可以在一个jsp页面中包含另一个页面。(一般不用)
  • taglib:标签库,可以引入标签进行开发,可以简化小脚本。除官方外,可以自定义。例如:jstl
    vue中的原型
3. 表达式 <%= %> :

小脚本的升级
替代了小脚本中的输出out.print();让jsp在html页面中输出更简单。

4. 小脚本 <% %>

=Java代码 。存在例外:System.out.print() -> out.print(); request.getSesson() -> session
(session是JSP的内置对象,而在servlet中属于request对象的一个属性)

  1. 方法声明<%! %>
    jsp页面中声明一个方法,可以多次调用。
  2. 标准动作 <jsp:keyword></jsp>:
    标签的基础,但是没人用。
  3. 注释:<%-- jsp注释内容 --%>
    等价于Java中的注释,不用
<!--html注释-->
<%
    //Java单行注释
    /*
    * Java多行注释
    * */
%>
<%--jsp注释--%>

(3)JSP九个内置对象

JSP中九大内置对象为:

  1. pageContext 页面上下文对象 类型 javax.servlet.jsp.PageContext 作用域 Page
2. request 请求对象

类型 javax.servlet.ServletRequest 作用域 Request
前端——>后端
设置请求字符编码
获取数据

3. response 响应对象

类型 javax.servlet.SrvletResponse 作用域 Page
后端——>前端
设置请输出响应求字符编码
输出数据

//1、设置编码格式。
request.setCharacterEncoding("utf-8");

//2、获得表单数据
String start = request.getParameter("_start");
String limit = request.getParameter("_limit");

//3、封装message对象

//4、调用dao实现插入操作
List<Message> messageList = new MessageDaoImpl().getMessageByPage(Integer.parseInt(start),Integer.parseInt(limit));

//5、设置编码格式
response.setContentType("text/html; charset=utf-8");

//6、ajax返回结果 1/0   object -> json
PrintWriter out = response.getWriter();
String ret = JSON.toJSONString(messageList);
out.print(ret);
out.close();
4. session 会话对象

类型 javax.servlet.http.HttpSession 作用域 Session

  1. application 应用程序对象
      类型 javax.servlet.ServletContext 作用域 Application
6. out 输出对象

类型 javax.servlet.jsp.JspWriter 作用域 Page
out.print()

  1. config 配置对象   类型 javax.servlet.ServletConfig 作用域 Page
  2. exception 异常对象     类型 javax.lang.Throwable 作用域 page
  3. page 页面对象     类型javax.lang.Object 作用域 Page

(4)四大作用域

  1. 域对象作用:保存数据和获取数据,用于数据共享。
  2. 域对象方法:
    setAttribute(“name”,Object) 保存数据
    getAttribute(“name”) 获取数据
    removeAttribute(“name”) 清除数据
  3. 域对象作用范围:
    page域: 只能在当前jsp页面中使用(当前页面)
    request域: 只能在同一个请求中使用(转发)
    session域: 只能在同一个会话(session对象)中使用(重定向)
    application域: 只能在同一个web应用中使用。(全局的)

(5)转发和重定向【难点】

(传统模型):
在这里插入图片描述
在这里插入图片描述

  • 结果指向都是JSP或者另一个servlet。
  • 前后端分离无需转发和重定向,传统方式才需要后续操作。
    在这里插入图片描述

转发
url地址不变。
一次请求响应过程,request数据传递。
request

重定向
url会发生改变
两次请求响应过程,session传参。
response

(6)session和cookie

  1. 会话:浏览器和服务器之间进行一次连接多次对话的总称。

  2. session的作用域就是一次会话。
    session创建:浏览器第一次与服务器进行通信的时候,在服务器创建session对象。
    session销毁:关闭浏览器(延时)、session超时(30)、session.invalidate()

  3. session和cookie的区别:
    当用户量过大时使用session,由服务器开辟,属于内存对象,存放在内存中,内存会崩掉。session id存放在cookie中
    选择cookie,存放在客户端,属于text文本,cookie是明文存储,需要自行加密。不如session安全
    HTML5后选择 sessionStorage

会话:当第一次访问某网站时,开辟一个内存空间,拥有一个私人的session id返给浏览器session id存在cookie中;当再访问该网站时可以用该session id来取出存放的东西,比如user id,可以不用登录;持续活跃时空间一致保留,但是一定时间不用30min(超时,监控浏览器而不是标签)或者自己归还空间主动关闭浏览器(定期回收),就释放。还可以程序回收,但不会用。

  • 栗子①:
(传统模式下的登录验证)

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
直接访问index.jsp,显示未登录
先访问login.jsp后访问index.jsp,显示欢迎10001

  • 补充:
    getAttribute() 方法返回指定属性名的属性值。
    提示:如果您希望以 Attr 对象返回属性,请使用 getAttributeNode。
    在这里插入图片描述

(7)前后端分离登录验证JWT (大多token)重点在加密解密算法

  • 栗子②:
    前后端分离(微信小程序也可以使用)——在nginx中获取页面,tomcat中获取数据。【token解决】
    在这里插入图片描述
  • 栗子③:
    在HTML页面之间传递数据【建议使用sessionstorage】
    在这里插入图片描述

在这里插入图片描述

  • token是一个可加密可解密的字符串,可以在token中存放一些信息,例如用户ID,用户名等。
  • token可以自定义格式,也可以按照标准定义(三部分)。
    https://www.jianshu.com/p/576dbf44b2ae
单点登录、跨平台——token

存在客户端,而不是服务器
在这里插入图片描述
任意网站登录,其他网站(连锁店)也可以直接登录

补充 :websocket——前端局域网的跳转——客服

(8)JSP使用方法

  1. 需要引用
    在这里插入图片描述
  2. 在webapp下新建index.jsp

在这里插入图片描述
在这里插入图片描述
配置指令
在这里插入图片描述
https://www.cnblogs.com/dayandday/p/10681565.html配置tomcat

在这里插入图片描述

  • 以wabapp为根路径 localhost:8080/ 虚拟(可有可无)/(想查询的文件)
虚拟路径
  • 单纯 / 代表根路径
  • 目的:区分前台后台两个项目,做权限控制/区别时,以:
    localhost:8080/admin/***
    为路径的在数据库加权限;没有admin的无需加权限

二、el表达式+JSTL(分别替代JSP的表达式和脚本)

jsp的简化操作,简化数据展示和操作(共性)

(1)el表达式

(输出+简单操作 类似vue)

${ }

  • 配置指令
<%@ page isELIgnored="false" %>
  • 语法规则
//obj.attr
${user.id}
${user.userName}

//obj[]
${user["id"]}
${users[0].userName}
  • 隐式对象 - 11个
    在这里插入图片描述
  • 作用域对象可以省略,按 application -> session ->request ->page 查找,没有不输出。
    在这里插入图片描述
    正常情况下——jsp.request.getpremeter() /request.getSession() 取得值打印出来;
    使用el表达式——直接打印值,会自动的按照作用域由大到小找值,没有时不输出。且不用做非空判断。
    四个作用域中由多个存在并想要固定输出时(user),可以加(requestScope.user)前缀,则去固定作用域取值。

(2)JSTL

标签库:替代jsp脚本。实现页面全标签操作。一般jstl+el联合使用

(3)使用方法

  1. 准备工作

导入jar (jstl和standard)

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>jstl</artifactId>
  <version>1.2</version>
</dependency>
<dependency>
  <groupId>taglibs</groupId>
  <artifactId>standard</artifactId>
  <version>1.1.2</version>
</dependency>

页面引入taglib(标签库)_JSP指令

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
//这里prefix里面是c,则图中标签均为c:

在这里插入图片描述
常用标签:
<c:forEach> 类似于vue中的v-for,替代for循环


总结

JSP=HTML静态内容+指令+表达式 el表达式+小脚本 JSTL
除指令外其余均用标签,实现页面标签化,无Java语法。
逐渐被thymeleaf替代

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐