1.Web服务器跟踪客户状态,有四种方法
——建立含有跟踪数据的隐藏字段:type=“hidden”
——重写包含额外参数的URL:使用?后面加参数
——使用持续的Cookie
——使用Servlet API中的Session机制2.Session概念
Session用于跟踪客户状态。
Session指的是,在一段时间内,单个客户与Web服务器的一连串相关的交互过程
在一个Session中,客户可能会多次请求访问同一个网页,也有可能请求访问各种不同的服务器资源
Session运行机制
- 当一个Session开始时,Servlet容器将创建一个HttpSession(接口)对象,在HttpSession对象中,可以存放客户状态的信息(如购物车)
- Servlet容器为HttpSession分配一个唯一的标识符,成为Session ID。Servlet容器把Session ID作为Cookie,保存在客户的浏览器中
- 每次客户发出HTTP请求时,Servlet容器可以从HttpServletRequest对象中读取Session ID,然后根据Session ID找到相应的HttpSession对象,从而获取客户的状态信息
3.HttpSession API
HttpSession是一个接口,主要方法如下:
getId():返回String类型的Session的ID
用一个浏览器访问多次结果都不变,在这个浏览器中新建标签进行访问,或者使用这个浏览器再新建窗口,结果也不变。使用另一个浏览器访问,结果发生变化。
在一个浏览器中打开多个标签页,新建多个窗口,是属于同一个session(会话)。
invalidate():使当前的Session失效,Servlet容器会释放HttpSession对象占用的资源
isNew():判断是否是新创建的Session,如果是,返回true,否则返回false
setMaxInactiveInterval():设定一个Session可以处于不活动状态的最大时间间隔,单位是秒。如果超过这个时间,Session自动失效。如果设置为负数,表示不限制Session处于不活动状态的时间
4.Session生命周期
当用户第一次访问Web应用中支持Session的某个网页时,就会开始一个新的Session
接下来当客户浏览这个Web应用的不同网页时,始终处于同一个Session中
默认情况下,JSP网页都是支持Session的,也可以通过以下语句显示声明支持Session:<%@ page session = "true" %>
以下情况中,Session将结束生命周期,Servlet容器将Session占用的资源释放:
——客户端关闭浏览器
——Session过期
——服务器调用了HttpSession的invalidate()方法
5.JSP文件中控制Session
6.JSP文件中设置Session范围内的共享数据
7.使用Session传建一个简单的邮件系统
mailLogin.jsp
mailCheck.jsp
mailLogout.jsp
8.Session在实际开发过程中的使用
用户分为普通用户(查看)和系统管理员(查看与修改).普通用户名:zhangsan,密码:123.管理员用户名:lisi,密码:456.用户填错信息后,请求转发到登陆页面,把信息回填到页面上
login.jsp
UserLoginServlet.java
User.java
用重定向实现:
UserLoginServlet.java
login.jsp
接下来处理用户操作的权限
登陆成功后转发到index.jsp页面
index.jsp:如果是管理员,那么query和update都能显示。如果是普通用户,那么只显示query
QueryServlet.java:判断用户是否直接通过地址栏进行访问,使用session判断,如果session为空,说明用户信息没有存放到session中,此时应该重定向到登陆页面
UpdateServlet.java