session对象代表一次用户会话。一次用户会话的含义是:从客户端浏览器连接服务器开始,到客户端浏览器与服务器断开位置,就是一次会话。
session通常用于跟踪用户的会话信息,如判断用户是否登录系统,或者在购物车中,用于跟踪用户购买的商品。
session范围内的属性可以在多个页面的跳转之间共享。一旦关闭浏览器,即session结束,session范围内的属性将全部丢失。
session对象是HttpSession的实例,HttpSession有如下两个常用的方法。
1.setAttribute(String attName,Object attValue)设置session范围内attName属性的值为attValue
2.getAttribute(String attName)返回session范围内attName属性的值。
购物车实例
shop.jsp-----添加购买物品页面
<form method="POST" action="processBuy.jsp"> 书籍<input type="checkbox" name="item" value="book"><br> 电脑 <input type="checkbox" name="item" value="computer"><br> 汽车<input type="checkbox" name="item" value="car"><br> <input type="submit" value="购买"> </form>
<% Map<String,Integer> itemMap=(Map<String,Integer>)session.getAttribute("itemMap"); if(itemMap==null){ itemMap=new HashMap<String,Integer>(); itemMap.put("书籍",0); itemMap.put("电脑",0); itemMap.put("汽车",0); } //获取上一个页面的请求参数 String[] buys=request.getParameterValues("item"); for(String item:buys){ if(item.equals("book")){ int num1=itemMap.get("书籍").intValue(); itemMap.put("书籍",num1+1); }else if(item.equals("computer")){ int num2=itemMap.get("电脑").intValue(); itemMap.put("电脑",num2+1); }else if(item.equals("car")){ int num3=itemMap.get("汽车").intValue(); itemMap.put("汽车",num3+1); } } //将itemMap对象放到设置成session范围的itemMap属性 session.setAttribute("itemMap",itemMap); %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'processBuy.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> 您所购买的物品:<br> 书籍:<%=itemMap.get("书籍").intValue()%><br> 电脑:<%=itemMap.get("电脑").intValue()%><br> 汽车:<%=itemMap.get("汽车").intValue()%><br> <p><a href="shop.jsp">欢迎再次购买</a></p> </body> </html>
注:通常应该把与用户会话状态相关的信息放入session范围内。不要仅仅为了两个页面之间的交换信息,就将该信息放入session范围内。如果仅仅为了两个页面交换信息,可以将该信息放入request范围内,饭后forward请求即可。session机制通常用于保存客户端的状态信息,这些状态信息需要保存到web服务器的硬盘上,所以需求session里的属性值必须是可序列化的,否则将会引发不可序列化的异常。