setAttribute如果使用重定向由于地址发生了改变,超出request的作用域范围,所以页面会问无法获取到数据;
如果使用转发由于地址没有变,只是请求变了,所以没有超出request的作用域范围,页面可以获取到值
req.setAttribute("user",user);
//req.getSession().setAttribute("user",user);
resp.sendRedirect("store");
req.getRequestDispatcher("store").forward(req,resp);
管理会话的方法:
session对象的存在周期:
session的创建:
·浏览器访问服务器时,服务器为每个浏览器创建不同的session对象。
session的关闭:
·调用session. invalidate()方法,使session对象失效。
·访问时间间隔大于非活动时间间隔, session对象失效·关闭浏览器时,session对象失效。
会话跟踪技术:
。会话跟踪技术允许服务器确定访问站点的用户、用户访问站点的次数和用户停留站点的时间段。
。客户端和服务器之间的会话ID和状态信息,通常有四种方法:
. 使用servlet API中的Session会话机制(存储在web服务器)。
. 使用Cookie(存储在客户端浏览器)。
. URL重写:URL可以在后面附加参数,和服务器的请求一起发送,这些参数为名字/值对。
· 隐藏表单域: <input type="hidden">,非常适合步需要大量数据存储的会话应用。
Cookie的概念:
. Cookie的本意是“小甜饼”,我们俗称“曲奇饼”。
. 在JavaWeb中,Cookie是HTTP客户端和HTTP服务器之间传送的小块信息,用这类信息将状态添.加到无状态的HTTP协议中。
. 当HTTP服务器收到一个请求时,除了被请求的文档外,服务器还会选择返回一些状态信息给客户的浏览器。
. 这些状态信息应该由支持Cookie的客户端存储起来,放在客户端的机器里面。
. 客户端任何时候再发送新的请求给服务器,都要首先检查请求的URL和所存的Cookies中的URL是否对应。
Cookie的用法:
//Servlet类里的写法
Cookie c1=new Cookie( "name", name);
Cookie c2=new Cookie( "pwd", pwd);
//设置cookie得保存时间
c1.setMaxAge (60*60);
c2.setMaxAge(60*60);
//写入cookie
response.addCookie(c1);
response. addCookie(c2);
<-- jsp页面里的写法-->
<%
Cookie []cookie1=request.getCookies();
for(int i=0;i<cookie1.length;i++){
out.print(cookie1[i].getName());
out.print(cookie1[i].getValue());
}
%>
总结:
Servlet API中使用HttpSession和Cookie来跟踪客户的状态。
getSession方法返回与客户端请求绑定的会话对象。
会话跟踪的4大技术分别是:使用Session和Cookie、URL重与、藏表单域。