Session、MVC、JSP和EL表达式
Session
概念
它属于服务器端的一种会话机制,在一次会话的多次请求中实现数据的共享,将数据保存在服务器端的对象中。
HttpSession
-
快速入门:
-
常用的api方法:
-
获取session:request.getSession()
-
三个方法:
-
setAttribute(String name,Object value) 存储值
getAttribute(String name): ------>Object value 获取指定的值
removeAttribute(String name): 删除会话中指定的值
-
原理:Session对象的实现需要依赖于Cookie
-
注意:
-
两次打开客户端,服务器端不关闭,两次是否获取的是同一个session?
-
默认情况下:不是
-
需要手动指定cookie中的JSESSIONID,通过响应头的形式发送给客户端,设置cookie的存活时间
-
步骤:
Cookie cookie = new Cookie("JSESSIONID", session.getId()); cookie.setMaxAge(60); response.addCookie(cookie);
-
-
客户端不关闭,服务器端关闭,两次获取的session对象是不是同一个对象?
肯定不是,tomcat服务器内部做了优化,自动完成两项工作
-
session的钝化:序列化
-
session的活化:反序列化
-
-
session对象的销毁时机?
-
服务器关闭
-
session对象的存活时间 默认时间为30分钟
修改session默认存活时间
<session-config></session-config>
-
手动失效 invalidate() 销毁session对象
-
-
session特点:
-
session数据是保存在服务器端,cookie是保存在客户端中
-
session数据存储没有大小限制,cookie有,默认大小为4kb,同一个 域名下总cookie数量限制在20个以内
-
session数据是较为安全的,cookie数据相对不安全。
-
-
JSP
概念
Java Server Pages: 支持Java语言编写的运行在服务端上的页面。
JSP =HTML+JAVA
简化Servlet代码
原理
-
JSP本质上就是一个Servlet
JSP脚本:
-
概念:JSP定义使用 Java代码的方式、规范
-
第一种方式: <% java代码 %> 。被tomcat解析之后生成的代码是存放在哪个位置 service()方法中
-
第二种方式: <%! java代码 %>。被tomcat解析后生成的代码文件,位置在Servlet类的成员位置。可以定义成员变量也可以定义成员方法。
-
第三种方式: <%= java代码 %> 。 被tomcat解析后生成 的代码信息,会出现在页面中 通过打印流写入到页面中
JSP九大内置对象
-
在jsp页面中不用创建可以直接使用的对象,称之为内置对象
-
九大内置对象:
内置对象 | 真实对象类型 | 作用 |
request | HttpServletRequest | 获取请求资源,request域对象(一次请求多个资源共享) |
response | HttpServletResponse | 响应,响应的数据封装到响应对象 |
session | HttpSession | 实现多个用户之间数据共享 |
out | JspWriter | 输出对象,把信息输出到页面中 |
config | ServletConfig | 配置Serlet信息 |
exception | Throwable | 异常对象 (当前页面需要声明 isErrorPage = true) |
pageContext | PageContext | 当前页面实现数据共享 |
application | ServletContext | 全局域对象 代表整个web应用 |
page | Object(当前Servlet对象--->当前页面) | 当前页面 |
-
JSP指令
-
-
语法格式:
-
<%@ 指令名称 属性名= 属性值 属性名2 = 属性值2 ....%>
-
-
分类:
-
page -----> 配置当前的页面
-
contentType:等同于 response.setContentType("text/html;charset=utf-8")
设置响应体的mime类型以及编码字符集
-
设置当前页面的编码 可以使用pageEncoding = UTF-8
-
import : 导包 导入外部的一些类库资源
-
errorPage : 指定当前页面发生异常跳转的目标页面,会自动跳转过去
-
isErrorPage:确定是否使用exception内置对象 true-->使用 false-->不用,同时标识本页面为错误页面
-
-
include: ----> 包含其他页面信息
-
语法格式: <%@ include file = "资源路径" %>
-
结合使用 <jsp:include file = "资源路径">
-
-
taglib: 引入外部的标签库资源
-
语法格式: <%@ taglib prefix = "前缀" uri = "资源路径" %> 前缀可以自定义,但是一般使用默认的
-
-
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-
注释:
-
html注释
-
格式: <!-- html注释内容 -->
-
-
jsp注释: 一般使用jsp注释
-
格式: <%-- java代码、html代码 --%> 客户端是不显示的,服务器端对于jsp注释是不发送的。
-
-
MVC:开发模式
-
概念:
-
M:Model 模型-----> JavaBean
-
用于封装数据、处理业务逻辑(三层架构)--->Service
-
-
V: View 视图-----> JSP
-
展示数据
-
-
C: Controller 控制器------>Servlet 中枢大脑
-
获取表单输入的数据
-
关联模型和视图
-
给客户端响应一些业务结果(需要首先把数据传输给视图)
-
-
EL表达式
-
概念:Expression Language 表达式语言 只能在JSP页面上使用
-
作用:简化jsp页面中的java代码
-
-
注意事项:
-
对于jsp页面默认是支持el表达式。如果想要忽略el表达式
-
第一种 使用 isELIgnored = “true” 禁止当前页面使用EL表达式
-
第二种:
\${表达式} 忽略掉当前的EL表达式 如 ${3 > 4 ? true : false}
-
-
-
具体的使用:
-
运算:
-
运算符:
-
算术运算符 + - * / %
-
比较运算符 > < >= <= != ==
-
逻辑运算符 && (and) 与 || (or ) 或 !(not) 非
-
空运算符 empty
-
功能:判断域中存储的对象是否为空 对象为null或者给对象为容器,容器的长度为0
-
语法格式: ${empty 目标对象}:判断 字符串、数组、集合是否为null或者长度为0------>或
-
不为空 ${not empty 目标对象}:判断字符串、数组、集合不为null并且长度也不为0---->与
-
${empty 目标对象} 如果为空返回true 如果不为空返回false
-
${not empty 目标对象} 如果为空返回false,如果不为空返回true
-
-
-
-
从域中取值 request、ServletContext session pageContext
-
大小范围 : ServletContext > session > request > pageContext
-
在EL表达式中有对应的名字 applicationScope > sessionScope > requestScope > pageScope
-
-
el表达式只能从域中取值
-
语法格式: ${域名称.key名称}
-
-
EL取值时可以省略域名称
-
语法格式: ${key名称} 取值顺序:从最小的域中到最大的域中查找,直到查到为止。
如果没有查到,不显示,也不报错。
-
获取域中存储的对象中属性值:
语法格式:${对象名称.属性名称}
注意事项:映射JavaBean中的方法后面的名字 如getAge()----> Age---->age
获取集合中对象的属性值
list集合: ${key名称.get(索引).属性名}
map集合: ${key名称.get(key名称).属性名}
-
优化做法:
-
list集合: ${域名城.key名称[索引]}
-
map集合: ${域名城.key名称["key名称"]}
${域名城.key名称.key名称}
-
-
-
隐式对象获取方式: 可以通过pageContext获取到其他八大内置对象
-
EL表达式中有11个隐式对象
-
-