Session
Session是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的session对象,由于session为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自的数据放在各自的session中,当用户再去访问服务器中的其它web资源时,其它web资源再从用户各自的session中取出数据为用户服务。
//怎么获取 创建session
HttpSession session=request.getSession();
//存入数据
session.setAttribute("name", "Heyley");
//怎么获取 创建session
HttpSession session=request.getSession();
//存入数据
session.setAttribute("name", "Heyley");
一、 使用session实现简单的购物车
首先创建主页效果如图:
//获取所有的商品信息
List<Goods> list=gService.findAll();
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-type", "text/html;charset=UTF-8");
PrintWriter out=response.getWriter();
for(Goods entity:list){
out.print(entity.getName()+"<a href='/2011-10-251/servlet/BuyServlet?id="+entity.getId()+"'>加入购物车</a>"+"</br>");
}
其次创建显示购物车的页面:
List<Goods> carts=(List<Goods>) request.getSession().getAttribute("carts");
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-type", "text/html;charset=UTF-8");
PrintWriter out=response.getWriter();
out.print("购买的商品如下:");
for(Goods entity:carts){
out.print(entity.getName()+"</br>");
}
最后写要买商品的servlet
其中doget()中的代码:
//传递的参数获取其值
String rid=request.getParameter("id");
//类型转换
Integer id=Integer.parseInt(rid);
//执行查询
Goods entity=gService.findByid(id);
//session中获取list
HttpSession session=request.getSession();
List<Goods> carts=(List<Goods>) session.getAttribute("carts");
//判断
if(carts==null){
carts=new ArrayList<Goods>();
session.setAttribute("carts",carts);
}
//添加到集合中
carts.add(entity);
response.sendRedirect("/2011-10-251/servlet/ListCartsServlet");
二、 关闭打开浏览器商品还在
如果你打开浏览器点击了几个商品进入购物车里,当你关闭浏览器再打开的时候,你刚才所点击的商品已经没有了,这是所不希望的,所以你要填上这段代码在HttpSession session=request.getSession();之后
//实现关闭浏览器 再打开浏览器 加入购物车的商品 十分钟之内重新打开还在
Cookie cookie=new Cookie("JSESSIONID",session.getId());
cookie.setMaxAge(10*60);
cookie.setPath("/2011-10-251");
response.addCookie(cookie);
三、 IE禁用Cookie后的session处理
当禁用cookie时,上面一段代码就起不了作用了,也就是说你关闭浏览器再打开浏览器的时代商品已经没有了
解决方案:URL重写
response. encodeRedirectURL(java.lang.String url)
用于对sendRedirect方法后的url地址进行重写。
//响应到另一个servlet中
String url=response.encodeRedirectURL("/2011-10-251/servlet/ListCartsServlet");
response.sendRedirect(url);
附加:
Session的失效 默认时间是30分钟
Web.xml文件配置session失效时间
<session-config>
<session-timeout>分钟数</session-timeout>
</session-config>