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里的属性值必须是可序列化的。

Session入门实例的更多相关文章

  1. PHP之session相关实例教程与经典代码

    ·php 中cookie和session的用法比较 ·phpmyadmin报错:Cannot start session without errors问题 ·php中cookie与session应用学 ...

  2. Apache Mina入门实例

    一.mina是啥 ApacheMINA是一个网络应用程序框架,用来帮助用户简单地开发高性能和高可扩展性的网络应用程序.它提供了一个通过Java NIO在不同的传输例如TCP/IP和UDP/IP上抽象的 ...

  3. mybatis 详解(二)------入门实例(基于XML)

    通过上一小节,mybatis 和 jdbc 的区别:http://www.cnblogs.com/ysocean/p/7271600.html,我们对 mybatis有了一个大致的了解,下面我们通过一 ...

  4. mybatis 详解(三)------入门实例(基于注解)

    1.创建MySQL数据库:mybatisDemo和表:user 详情参考:mybatis 详解(二)------入门实例(基于XML) 一致 2.建立一个Java工程,并导入相应的jar包,具体目录如 ...

  5. ActiveMQ专题1: 入门实例

    序 好久没有写博客了,最近真的是可以说是忙成狗了.项目的事和自己的终身大事忙得焦头烂额,好在是一切都是越来越好了...... 趁着项目今天唯一的一点喘息时间,加上项目开始接触到的mq,开始写一篇amq ...

  6. 1. mybatis 的入门实例

    mybatis 的入门实例 1.创建一个普通的Java项目 1.加入jar包(所有mybatis 和mysql) 2.加入配置文件 src 目录下 (1) db.properties mysql.us ...

  7. mybatis学习一:基于xml与注解配置入门实例与问题

    注:本case参考自:http://www.cnblogs.com/ysocean/p/7277545.html 一:Mybatis的介绍: MyBatis 本是apache的一个开源项目iBatis ...

  8. React 入门实例教程(转载)

    本人转载自: React 入门实例教程

  9. struts入门实例

    入门实例 1  .下载struts-2.3.16.3-all  .不摆了.看哈就会下载了. 2  . 解压  后 找到 apps 文件夹. 3.    打开后将 struts2-blank.war   ...

  10. Vue.js2.0从入门到放弃---入门实例

    最近,vue.js越来越火.在这样的大浪潮下,我也开始进入vue的学习行列中,在网上也搜了很多教程,按着教程来做,也总会出现这样那样的问题(坑啊,由于网上那些教程都是Vue.js 1.x版本的,现在用 ...

随机推荐

  1. SpringBoot整合WebService(实用版)

    SpringBoot整合WebService 简介 WebService就是一种跨编程语言和跨操作系统平台的远程调用技术 此处就不赘述WebService相关概念和原理了,可以参考:https://b ...

  2. shell 默认参数

    #!/bin/bash dst_dir=${2:-/tmp} # 当 $2 为空或null时,设置默认值. docker cp prometheus:$1 $dst_dir

  3. Powe AutoMate:列表操作

    大纲 记录对列表的操作 创建列表 向列表中添加元素 添加多个 合并列表 运行结果 反转列表 反转前 反转后 删除列表中的重复项 结果: 减去列表 结果:

  4. windows传输文件到linux

    PFSTP 打开该软件,在安装putty自带的 连接服务器 open 192.168.142.131 按提示输入账户密码 传送文件 put C:\Users\13662\nifi-1.13.2-bin ...

  5. 从read 系统调用到 C10M 问题

    一.前言 从上个世纪到现在,工程师们在优化服务器性能的过程中,提出了各种不同的io模型,比如非阻塞io,io复用,信号驱动式io,异步io.具体io模型在不同平台上的实现也不一样,比如io复用在bsd ...

  6. [linux]常见内核TCP参数描述与配置

    前言 所有的TCP/IP参数都位于/proc/sys/net目录下(请注意,对/proc/sys/net目录下内容的修改都是临时的,任何修改在系统重启后都会丢失),如果需要固化设置,则需要修改/etc ...

  7. python命令行解析模块argparse

    argparse是Python标准库中推荐的命令行解析模块 code01: tmp.py import argparse parser = argparse.ArgumentParser(descri ...

  8. 【技术积累】Linux中的命令行【理论篇】【十】

    bunzip2 命令说明 bunzip2命令是Linux系统中的一个用于解压缩文件的命令.它可以解压缩使用bzip2算法压缩的文件,将其恢复为原始的未压缩文件. 命令介绍 bunzip2命令的语法如下 ...

  9. 在移动硬盘上安装Win11系统(不使用工具)

    一.准备镜像文件 1.前往官网下载Win11镜像文件. Win11官网:Download Windows 11 (microsoft.com) 2.装载Win11镜像 找到Win11镜像.右键点击装载 ...

  10. langchain中的LLM模型使用介绍

    简介 构建在大语言模型基础上的应用通常有两种,第一种叫做text completion,也就是一问一答的模式,输入是text,输出也是text.这种模型下应用并不会记忆之前的问题内容,每一个问题都是最 ...