• 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里的属性值必须是可序列化的
  • 相关阅读:
    POJ 2449 Remmarguts' Date(第k短路のA*算法)
    UESTC 1717 Journey(DFS+LCA)(Sichuan State Programming Contest 2012)
    HRBUST 1211 火车上的人数【数论解方程/模拟之枚举+递推】
    洛谷 P1372 又是毕业季I[数论/神坑规律题]
    洛谷 P1865 A % B Problem[筛素数/前缀和思想/区间质数个数]
    CCCC L2-003. 月饼[贪心/类似hdu贪心老鼠]
    二项式定理与杨辉三角
    Educational Codeforces Round 39 (Rated for Div. 2) B. Weird Subtraction Process[数论/欧几里得算法]
    洛谷 P1784 数独[DFS/回溯]
    Wannafly交流赛1 B 硬币[数学思维/贪心]
  • 原文地址:https://www.cnblogs.com/wxdlut/p/3474339.html
Copyright © 2020-2023  润新知