Session入门实例

session对象(是JSP的9大内置对象之一):
(1)session代表一次用户会话:从客户端浏览器连接服务器开始,到客户端浏览器与服务器断开为止,这个过程就是一次会话。
(2)session作用:通常用来跟踪用户的会话信息,如判断用户是否登录系统,或者在购物车应用中,用于跟踪用户购买的商品
 
用session对象来保证itemMap对象在一次会话中有效,这是对购物车可以反复购买,只要浏览器不关闭,购买的商品信息就不会丢失。
例子1:
(1)shop.jsp
 1 <%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 
 4 <head>
 5     <title>选择物品购买</title>
 6 </head>
 7 
 8 <body>
 9 <form method="post" action="processBuy.jsp">
10     书籍:<input type="checkbox" name="item" value="book"/><br/>
11     电脑:<input type="checkbox" name="item" value="computer"/><br/>
12     汽车:<input type="checkbox" name="item" value="car"/><br/>
13     <input type="submit" value="购买">
14 </form>
15 </body>
16 </html>
(2)processBuy.jsp
 1 <%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
 2 <%@ page import="java.util.*" %>
 3 <%
 4 //取出session范围的itemMap属性,Map<String, Integer> itemMap为对象,getAttribute("itemMap")为属性
 5 Map<String, Integer> itemMap = (Map<String, Integer>)session.getAttribute("itemMap");
 6 //如果对象为空,则初始化对象
 7 if (itemMap == null) {
 8     /*
 9         public class HashMap<K,V>
10         extends AbstractMap<K,V>
11         implements Map<K,V>, Cloneable, Serializable
12     */
13     itemMap = new HashMap<String, Integer>(); 
14     itemMap.put("书籍", 0);
15     itemMap.put("汽车", 0);
16     itemMap.put("电脑", 0);
17 }
18 //获取上一个页面的请求参数
19 String[] buys = request.getParameterValues("item");
20 //遍历数组的各元素
21 for (String item : buys) {
22     //如果item为book,表示选择书籍购买
23     if (item.equals("book")) {
24         int num1 = itemMap.get("书籍");
25         itemMap.put("书籍", num1+1);
26     }
27     else if (item.equals("computer")) {
28         int num2 = itemMap.get("电脑");
29         itemMap.put("电脑", num2+1);
30     } 
31     else if (item.equals("car")) {
32         int num3 = itemMap.get("书籍");
33         itemMap.put("汽车", num3+1);
34     } 
35 }
36 //将itemMap对象放到设置成session范围的itemMap属性
37 session.setAttribute("itemMap", itemMap);
38 %>
39 
40 <html xmlns="http://www.w3.org/1999/xhtml">
41 <head>
42     <title>new document</title> 
43 </head>
44 <body>
45 您所购买的物品:<br/>
46 书籍:<%=itemMap.get("书籍")%><br/>
47 电脑:<%=itemMap.get("电脑")%><br/>
48 汽车:<%=itemMap.get("汽车")%><br/>
49 
50 <p><a href="shop.jsp">再次购买</a></p>
51 </body>
52 </html>

演示:

 
说明:
1、用户打开浏览器购买了1台电脑(session对象为购物车里的数据:书籍0,电脑1,汽车0,此session对象保存在服务器的内存中),这个第一个请求;用户点击再次购买,选择电脑和汽车后提交,此时服务器会从session对象里取出购物车里的数据:书籍0,电脑1,汽车0,并和本次请求购买的数据(数据0,电脑1,汽车1)相加,并再次保存session对象。
2、
第一次请求进来会先执行:
36 //将itemMap对象放到设置成session范围的itemMap属性
37 session.setAttribute("itemMap", itemMap);
第二次请求进来,则执行:
 4 //取出session范围的itemMap属性,Map<String, Integer> itemMap为对象,getAttribute("itemMap")为属性
 5 Map<String, Integer> itemMap = (Map<String, Integer>)session.getAttribute("itemMap");
JSP对应的Servlet有session的初始化:JSP的session对象对应Servlet的javax.servlet.http.HttpSession
 
注意:
  1、考虑到session本身的目的,通常只应该把用户会话状态相关的信息放入session范围内;不要仅仅为了两个页面交换信息,就将该信息放入session范围内(此时可以将信息放入request范围内,然后forward请求即可)
       2、session机制通常用于保存客户端的状态信息,这些状态信息需要保存到Web服务器的硬盘上,所以要求session里的属性值必须是可序列化的
原文地址:https://www.cnblogs.com/wxdlut/p/3474339.html