会话对象的使用
- 检索会话对象
- 存储会话属性
- 访问会话属性
- 销毁会话
可使用部署描述符控制所有会话的生命周期
<session-config>
<session-timeout>10</session-timeout>
</session-config>
Cookie 的定义
HTTP 允许一个 Web 服务器在客户机器上存储信息的机制,叫做 Cookie
- Cookie 存储在客户的计算机上,Session 存储在服务器端
- Cookie 在 Web 服务器的响应中发出
- Cookie 的内容主要包括:名字,值,过期时间,路径和域
- 该域(及路径)的所有 Cookie 在每一个请求中均发送给 Web 服务器
- 不设置过期时间,Cookie 的生命期为浏览器会话期间,会话 Cookie一般不存储在硬盘上而是保存在内存里
- 设置了过期时间,浏览器就会把 Cookie 保存到硬盘上
- Cookie 具有生命周期,且在生命周期的最后由客户浏览器清除
Cookie API
HttpServletResponse 接口:addCookie(Cookie)
HttpServletRequest 接口:getCookies() : Cookie[]
Cookie 类:
定义
public class Cookie implements Cloneable
构造函数:
public Cookie(String name, String value);
用一个 name-value 对定义一个 cookie。这个 name 必须能被 HTTP/1.1 所接受。
使用 Cookies
通过将 Cookies 加到响应对象中,可将其存储在客户计算机上:
String name = request.getParameter("firstName");
Cookie c = new Cookie("yourname", name);
c.setMaxAge(24*60*60);
response.addCookie(c);
可从请求对象中检索 Cookies:
Cookie[] arr=request.getCookies();
for(Cookie c:arr){
System.out.println("c.key="+c.getName()+",value="+c.getValue());
}
- 客户端第一次向服务器端发出请求,没有带 Cookie
- 服务器端检查请求中是否带有 Cookie–没有,在服务器端创建新的 session,并且为它绑定一个 sessionid
- 服务器端向客户端返回数据—resp。将 sessionid 加入到 Cookie 中,将 cookie 加入到 response 中,返回给客户端
- 返回的 Cookie 没有设置 MaxAGE,所以保存在浏览器的内存中
- 当客户端第二次向服务器端发送请求时,带着内存中的 cookie 一起到服务器端
- 服务器端检查请求中是否带有 Cookie—根据 Cookie 中的 jsessionid 查找对应的session
JSP页面的处理过程
- 请求进入 Web 容器,如果第一次访问 jsp 页面,JSP Parser 将 JSP 页面翻译成 Servlet 代码;如果不是第一次访问执行4
- 编译 Servlet 代码,并将编译过的类文件装入 Web 容器(JVM)环境
- Web 容器为 JSP 页面创建一个 Servlet 类实例,并执行 jspInit 方法
- Web 容器为该 JSP页面调用 Servlet实例的_jspService 方法,将结果发送给用户
开发及部署 JSP 页面
开发期间将 JSP 文件放在 web 目录下
部署时将其拷贝到如下层次中
webapps/
project/
WEB-INF/
web.xml
classes/
lib/
index.html
hello.jsp
date.jsp
JSP脚本元素
脚本元素<% %>
由 JSP 引擎处理;所有其它文本、脚本以外的元素均被作为响应的一部分
注释: <%-- comment --%>
指令标签: <%@ directive %>
声明标签:<%! Decl %>
脚本标签:<% code %>
表达式标签: <%=expr %>
将 jsp 翻译成 Servlet 的过程:
- 指令标签 根据指令内容直接翻译到 Servlet 相应位置
- 声明标签 定义的变量翻译成 Servlet 的属性;声明的方法翻译成 Servlet 的方法;定义的类翻译成 Servlet 的内部类;
- 脚本标签 依照先后顺序,翻译到_jspservice 方法里
- 表达式标签 封装 java 运行时表达式,其值直接到相应位置
- 注释 不翻译到 Servlet 中
除上述脚本元素以外所有代码,按照先后顺序全部视为文本,翻译到_jspservice 方法里,
out.print 直接输出
Jsp 页面中的隐含对象
_jspService 方法中预定义的变量:
- request 与请求相关的 HttpServletRequest 对象
- response 与送回浏览器的响应相关的 HttpServletResponse 对象
- out 与响应的输出流相关的 JspWriter 对象
- session 与给定用户请求会话相关的 HttpSession 对象,该变量只在 JSP 页面参与一个 HTTP 会话时有意义
- application 用于 Web 应用的 ServletContext 对象
- config 与该 JSP 页面的 servlet 相关的 ServletConfig 对象配置
- pageContext 该对象封装了一个 JSP 页面请求的环境
- page 该变量与 Java 编程语言中的 this 变量等价
- exception 由其它 JSP 页面抛出的 Throwable 对象,该变量只在―JSP 错误页面‖中可用