文档介绍:第四课
Servlet会话跟踪
回顾
HttpServletRequest常用方法
HttpServletResponse常用方法
Servlet请求转发与重定向区别
转发是从当前服务器调转返回浏览器浏览器再发送请求
转发请求一次,重定向请求两次转发地址栏不改变,重定向会改变
Servlet上下文(ServletContext)概念和接口方法
提问
本章案例
用会话跟踪(Cookie、URL重写、隐藏表单域)显示欢迎词
使用Servlet会话跟踪实现购物车功能
本章目标
HTTP协议的无状态性
HttpSession的使用
Cookie的介绍与使用
HTTP的无状态性
既然HTTP协议的目的在于支持超文本的传输,更加广义一些就是支持资源的传输,那么在客户端浏览器向HTTP服务器发送请求,继而HTTP服务器将相应的资源发回给客户端这样一个过程中(请求—响应过程),无论对于客户端还是服务器,都没有必要记录这个过程,因为每一次请求和响应都是相对独立的,所以,HTTP协议被设计为无状态的连接协议符合它本身的需求
随着时间的推移,人们发现静态的HTML着实无聊而乏味,增加动态生成的内容才会令Web应用程序变得更加有用。在这种客户端与服务器进行动态交互的Web应用程序出现之后,HTTP无状态的特性严重阻碍了这些应用程序的实现,毕竟交互是需要承前启后的,简单的购物车程序也要知道用户到底在之前选择了什么商品
为了保持HTTP状态,会话跟踪技术就应运而生了
会话(Session)
1、会话概念
顾名思义,会话是指客户端与服务端的一场对话过程,客户端问一句
话,服务端应答一句话,这样一问一答的过程可以连续持续多次,这个
过程就被称之为一个会话过程;其中客户端问的动作就是发送请求
(Request)的动作,而服务端应答(Response)的动作并是响应客户端
的动作,多次Request与Response的就构成了一个会话(Session)
2、会话跟踪:
会话跟踪机制是一种在客户端与服务器之间保持HTTP状态的解决方案,这些解决方案主要分为如下几种:
A、Cookie:在浏览器支持Cookie的情况下使用Cookie来跟踪
B、URL重写:在浏览器不支持Cookie的情况下使用URL重写
C、Session:建立在Cookie与URL重写基础之上的高层接口,默认使用Cookie,
在浏览器禁用Cookie的情况下自动切换成URL重写
3、如果客户端浏览器被关闭则会话将被强行结束
Servlet中会话跟踪(Session)
Session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构来保存会话过程中的信息,它有如下主要的API:
A、():获取与当前请求相关联的Session对象,如果当前请求已经存在一个与之相关联的Session则直接返回它,如果没有则创建一个与当前请求相关联的Session对象
B、setAttribute(String attr,Object object):将一个键值对推入Session作用域中保存起来,以便在同一个会话的其它请求中获取
C、getAttribute(String attr):根据键名从Session作用域中取出对应的值
D、removeAttribute(String attr):删除Session作用域中参数键名标识的键值对
E、getId():返回通过重写URL得到的SessionId,它是Session的唯一标识符
F、isNew():判断当前的Session是否为新创建的会话
G、getCreationTime()返回Session的创建时间(使用毫秒表示)
H、essedTime():返回当前Session最后一次的访问时间(使用毫秒表示),如果是第一次访问则返回值与getCreationTime()返回值相同
I、invalidate():删除当前会话(结束当前的会话,释放会话作用域中保存的所有信息)
会话超时
Session的默认失效时间是30分钟(1800秒),我们也可以使用下面两种方式之一显式的为Session设置一个失效时间:
A、HttpSession类的setMaxInactiveInterval()方法为每个单独的Session对象实例设置失效时间(局部设置,单位是秒,如果设置为负数表示永不失效)
B、-app标签下使用session-config和session-timeout元素配置所有Session的失效时间(全局设置,单位是分钟,如果设置为0或负数表示永不失效)
<session-config>
<session-timeout>180