比如:在网上书店应用中,从一个客户开始购物,到最后结账,整个过程是一个Session.
Servlet API中定义了javax.servlet.http.HttpSession接口,Servlet容器必须实现这一接口。当一个Session开始时,Servlet容器将创建一个HttpSession对象,在HttpSession对象中可以存放客户状态的信息。Servelt容器为HttpSession分配一个唯一标识符,称为Session ID.Servlet容器把Session ID作为Cookie保存在客户的浏览器中。每次客户发出HTTP请求时,Servlet容器可以从HttpRequest对象中读取Session ID,然后根据SessionID找到相应的HttpSession对象,从而获取客户的状态信息。
HttpSession接口中的方法:
getId():返回Session的ID;
invalidate():使当前的Session失效,Servlet容器会释放HttpSession对象占用的资源。
setAttribute(String name,Object value):将一对name/Value属性保存在HttpSession对象中
getAttribut(String name):根据name参数返回保存在HttpSession对象的属性值。
getAttributeNames():以数组的方式HttpSession对象中所有的属性名。
isNew():判断是否是新创建的Session,如果是新创建的Session,返回true,否则返回false
setMaxInactiveInterval():设定一个Session可以处于不活动状态的最大时间间隔,以秒为单位。如果超过这个时间。Session自动失效,如果设置为负数,表示不限制Session付出与不活动状态的时间。
getMaxInactiveInterval()读取当前Sessions可以处于不活动状态的最大时间间隔。
在Java Servlet API中提出了跟踪Session的另一种机制,如果客户浏览器不支持Cookie,Servlet容器可以重写客户请求的URL,吧Session ID添加到URL信息中。
HttpServletResponse接口提供了重写URL的方法:
public java.lang.String encodeURL(java.lang.String url)
该方法的实现机制为:
先判断当前的Web组件是否启用Session,如果没有启用Session,例如在JSP中声明
<%@ page session="false"%>或者已经执行了session.invalidate()方法,那么直接返回参数URL
再判断客户浏览器是否支持Cookie,如果支持Cookie,就直接返回参数URL;如果不支持,就在参数URL中加入Session ID信息,然后返回修改后的URL.
String username1 = ""; (username1 为自定义的字段,从数据库中取出值后放到里面)
request.getSession().setAttribute("username",username1);
从request里得到session在把值传进去,不过这种方法可以将从数据库里取得的数据用session显示于页面,但当在页面点击按钮产生别的action的时候,取出来显示在页面的数据就都没了,原来是request的生命周期是一个请求,当另外一个请求发生时,原来action中的request的值没重置了,也就是说原来的数据都没了,所以在页面也不会显示.这时候要将原来action中的request.getSession().setAttribute("username",username1);
改为HttpSession session = request.getSession(); session.setAttribute("username",username1);这时候传到页面的生命周期就是一个会话,即使你在页面有别的请求,但session中的值依然存在.
posted on 2011-06-14 10:40
Hukin 阅读(372)
评论(0) 编辑 收藏