JSP内置对象----session

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里的属性值必须是可序列化的,否则将会引发不可序列化的异常。

你可能感兴趣的:(JSP内置对象----session)