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> 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.Stringurl)
用于对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>