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>
processBuy.jsp-----处理物品页面
<%
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里的属性值必须是可序列化的,否则将会引发不可序列化的异常。