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. 详解TCP网络协议栈的工作原理

    本文分享自华为云社区<网络通信的神奇之旅:解密Linux TCP网络协议栈的工作原理>,作者: Lion Long . 一.TCP网络开发API TCP,全称传输控制协议(Transmis ...

  2. Django创建数据库时设置字符集

    在控制台输入一下命令: create database 数据库名 charset=utf8;

  3. 日历插件zaneDate 不依赖任何第三方插件 简单高效

    先来找图看看时间选择器的效果:             没错就是这个吊样,如果你不需要这个色调,你可以fork我的github项目任意修改美美的色调. 当然也欢迎你给我提很多很多的bug让我改不停 . ...

  4. ABC295 D题 题解

    题意简述 给定一个长度不超过\(\;5\times 10^5\;\)的,仅有数字构成的字符串,问存在多少段子串,使得子串内字符重新排序后,前半段与后半段相同? 做法分析 重组后前后两部分相同,其实也就 ...

  5. [jenkins]连接git仓库

    连接gitlab 在jenkins添加全局凭据,类型为"ssh username with private key",填写git用户名和ssh私钥信息(注意是git客户端所在机器的 ...

  6. C#性能优化-树形结构递归优化

    前言 大家好,我是wacky,最近在工作中遇到一个有趣的问题,同事反馈说WPF中有一个树形结构的集合,在加载时会直接报堆栈溢出,一直没时间(懒得)看,导致很久了也没人解决掉.于是,组长就把这个&quo ...

  7. 【RocketMQ】消息的发送

    RocketMQ是通过DefaultMQProducer进行消息发送的,它实现了MQProducer接口,MQProducer接口中定义了消息发送的方法,方法主要分为三大类: send同步进行消息发送 ...

  8. CAJViewer卡的解决办法

    在做毕业设计时,使用了CAJViewer7.2版本的阅读器,使用起来非常卡,翻页总是不流畅,体验感极差. 最后实在受不了了,去百度了一下,在贴吧中看到了疑似解决方案,尝试了一下,真的不卡了.所以特此写 ...

  9. 高德Android高性能高稳定性代码覆盖率技术实践

    ​前言 代码覆盖率(Code coverage)是软件测试中的一种度量方式,用于反映代码被测试的比例和程度. 在软件迭代过程中,除了应该关注测试过程中的代码覆盖率,用户使用过程中的代码覆盖率也是一个非 ...

  10. 什么是IP协议?

    简介: IP(Internet Protocol)协议,又称网际协议,是TCP/IP协议的核心.它负责Internet上网络之间的通信,并规定了将数据报从一个网络传输到另一个网络所应遵循的规则.具体来 ...