第5章 会话与状态管理

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
encodeURL()
Session的跟踪机制
当Servlet程序决定与客户端开启一个会话时,Web应用程序 会创建一个与该客户端对应的HttpSession对象,并为这个 HttpSession对象分配一个独一无二的会话ID,然后在响应消 息中将这个会话ID传递给客户端。该客户端此后访问任意的 Servlet程序时,它们都使用与客户端对应的那个已存在的 HttpSession对象。 HttpSession接口中专门定义了一个setAttribute方法来将对 象存储到HttpSession对象中,还定义了一个getAttribute方 法来检索存储在HttpSession对象中的对象,由于属于同一个 会话的各个请求的处理程序共享同一个HttpSession对象,所 以,存储进HttpSession对象中的对象可以被属于同一个会话 的各个请求的处理程序共享。 提示:在ServletRequest、HttpSession和ServletContext
会话状态
用户的登录账户和订购的产品就是会话的状态信息
如何实现有状态的会话
Cookie Session
Cookie
什么是Cookie Cookie的特点 Cookie在浏览器与WEB服务器之间传送的过程 在Servlet程序中使用Cookie Cookie的综合实例
利用URL重写实现Session跟踪
考虑到浏览器有可能不支持Cookie的情况,Servlet规范中 还引入了一种补充的会话管理机制,它允许不支持Cookie 的浏览器也可以与Web服务器保持连续的会话。这种补充机 制要求在响应消息的实体内容中必须包含下一次请求的超链 接,并将会话标识号作为超链接的URL地址的一个特殊参数 数。 HttpServletResponse接口中定义了两个用于完成URL重 写方法:
返回一个指示请求消息中的SessionID是否有效
isRequestedSessionIdFromCookie()
判断SessionID是否是通过请求消息中的Cookie传递过来的
isRequestedSessionIdFromURL()
判断SessionID是否是通过请求的URL参数传递过来的
Cookie类的方法:
getName() public Cookie(String name,String value)
setValue()与getValue()
用于返回Cookie的名称
setMaxAge()与getMaxAge()
用于设置和返回Cookie的值
用于设置和返回Cookie在浏览器客户机上保持有效的秒数
等对象中都可以存储对象,我们应注意区分存储在它们里面的 对象的作用范围。
Session的超时管理
会话的超时间隔可以在web.xml文件中设置: <session-config> <session-timeout>30</session-timeout> </session-config> 这里设置的时间值是以分钟为单位的。
Cookie在浏览器与WEB服务器之间传送的过程
在Servlet程序中使用Cookie
ServletAPI中提供了一个javax.servlet.http.Cookie类来 封装Cookie信息,在HttpServletResponse接口中定义了 一个addCookie方法来向浏览器发送Cookie信息,在 HttpServletRequest接口中定义了一个getCookies方法来 读取浏览器回送的Cookie信息。 Cookie类只一个如下的构造方法:
Cookie的特点
一个WEB站点可以给一个WEB浏览器发送多个 Cookie,这样,在WEB浏览器和WEB服务器之间 就可以使用多个Cookie来传递多种信息。为了防 止Cookie塞满客户机的硬盘,浏览器一般只允许 存放300个Cookie,每个站点最多存放20个 Cookie,每个Cookie的大小限制为4KB。如果没 有设置Cookie的有效时间,接受它的浏览器进程 只将该Cookie保存在自己的内存空间中,在该浏 览器进程关闭时,它里面保存的所有Cookie也将 随之消失。
修改web.xml
<servlet> <servlet-name>cookieservlet</servlet-name> <servlet-class>lesson5.CookieServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>cookieservlet</servlet-name> <url-pattern>/cookie</url-pattern> </servlet-mapping>
第5章 会话与状态管理
目标
Web应用中的会话与会话状态 Cookie Session Session的典型案例[购物车]
ServletAPI的层次结构
Servlet GenericServlet HttpServlet ServletConfig ServletContext RequestDispatcher
HttpSession接口中的方法
getId() 返回与当前HttpSession对象关联的会话标识号 getCreationTime() 返回当前HttpSession对象的创建时间 getLastAccessedTime() 返回当前HttpSession对象上一次被访问的时间 setMaxInactiveInterval() 设置当前HttpSession对象可空闲的以秒为单 位最长时间 getMaxInactiveInterval() 返回当前HttpSession对象可空闲的以秒为单 位最长时间 isNew() 返回当前HttpSession对象是否是新创建的 invalidate() 强制当前HttpSession对象无效 setAttribute() 将一个对象与一个名称关联后存储进当前的HttpSession对 象中 getArrtibute() 从当前HttpSession对象中返回指定名称的属性对象 removeAttribute() 从当前HttpSession对象中删除指定名称的属性 getAttributeNames() 返回一个包含当前HttpSession对象中的所有属性 名的Enumeration对象
启动Tomcat并查看Fra Baidu bibliotek示的结果
启动Tomcat并查看显示的结果
查看客户端保存的Cookie文件
C:\Documents and Settings\Administrator\Cookie\administrator@lesson5[1].txt date "Wed Nov 28 08:49:08 CST 2007" localhost/lesson5/ 1024 4099348992 29970473 2075087792 29897048 * count 2 localhost/lesson5/ 1024 1834381696 29970474 4109307792 29897048 *
什么是Cookie
Cookie是一种在客户端保持HTTP状态信息的技术,Cookie是 在浏览器访问WEB服务器的某个资源时,由WEB服务器在 HTTP响应消息头中附带传送给浏览器的一片数据,WEB服务 器传送给各个客户端浏览器的数据是可以各不相同的。浏览器 可以决定是否保存这片数据,一旦WEB浏览器保存了这片数据, 那么它在以后每次访问该WEB服务器时,都应在HTTP请求头 中将这片数据回传给WEB服务器。 WEB服务器通过在HTTP响应消息中增加Set-Cookie响应头字 段将Cookie信息发送给浏览器,浏览器则通过在HTTP请求消 息中增加Cookie请求头字段将Cookie回传给WEB服务器。一 个Cookie只能标识一种信息,它至少含有一个标识该信息的名 称(NAME)和设置值(VALUE)。
Cookie的综合实例
编写CookieServlet的Servlet程序 修改web.xml 启动Tomcat并查看显示的结果 查看客户端保存的Cookie文件
编写CookieServlet的Servlet程序
response.setContentType("text/html;charset=gb2312"); PrintWriter out = response.getWriter(); Cookie[] cks = request.getCookies(); if (null == cks) { out.println("你是第1次登录"); Cookie dateCookie = new Cookie("date", new Date().toString()); dateCookie.setMaxAge(365 * 24 * 3600); Cookie countCookie = new Cookie("count", "1"); countCookie.setMaxAge(365 * 24 * 3600); response.addCookie(dateCookie); response.addCookie(countCookie); } else { for (int i = 0; i < cks.length; i++) { if (cks[i].getName().equals("count")) { cks[i].setMaxAge(365 * 24 * 3600); cks[i].setValue(String.valueOf(Integer.parseInt(cks[i].getValue()) + 1)); response.addCookie(cks[i]); out.println("你是第" + cks[i].getValue() + "次登录<br>"); } else { out.println("你的第一次登录日期:" + cks[i].getValue() + "<br>"); } } }
Session
什么是Session Session的跟踪机制 Session的超时管理 HttpSession接口中的方法 HttpServletRequest接口上的Session方法 利用URL重写实现Session跟踪 Session的综合实例
什么是Session
HttpServletRequest接口上的Session方法
Session是与每个请求消息紧密相关的, HttpServletRequest定义了一些与Session相关的方 法:
getSession()
返回与当前请求相关的HttpSession对象
isRequestedSessionValid()
使用Cookie可以将上一次请求的状态信息传递到下一 次请求中,但是如果传递的状态信息较多,将极大降低 网络传输效率和增大服务器端程序处理的难度,即使这 样,传递的信息量也是非常有限的。为此,各种服务器 端的开发方案都提供了一种将会话状态保存在服务器端 的技术,即Session技术。 ServletAPI规范中定义了一个HttpSession接口, HttpSession接口定义了各种管理和操作会话状态的方 法。一个客户端在Web服务器端对应一个各自的 HttpSession对象。
HttpServletResponse
Cookie
HttpServletRequest
HttpSession
Web应用中的会话与会话状态
在Web服务器端的程序开发中,会话状态管理是一个 重要的问题。要掌握会话状态管理,首先就必须理解会 话与会话状态。 会话
一个用户在某网站上的整个购物过程就是一个会话
相关文档
最新文档