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. 智能制造之路—从0开始打造一套轻量级MOM平台

    一.概述 面对数字化浪潮,MOM需求迈入上升期,数字化从"可选项"变成了企业竞争"必选项".制造行业每个工厂的生产逻辑都不尽相同,流程的梳理.数据统一化都需要调 ...

  2. 2021-6-17 plc连接

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  3. React报错:You are running `create-react-app` 5.0.0, which is behind the latest release (5.0.1).

    错误 解决方案 说白了就是版本过低,升级下就好.或者按照提示卸载掉原来的版本,之后输入临时创建命令即可,如下图所示 参考链接 https://stackoverflow.com/questions/7 ...

  4. 从浏览器架构认识BOM和DOM

    浏览器架构 JavaScript运行在浏览器,BOM就是连接JavaScript代码和浏览器的桥梁,而DOM就是用来操作各种标签元素的. BOM包括 window.history.location.d ...

  5. LabVIEW图形化的AI视觉开发平台(非NI Vision)VI简介

    前言 今天想和大家分享的是:仪酷LabVIEW AI视觉工具包的VI简介,如介绍内容有误,欢迎各位朋友们帮忙纠正~ 一.AI视觉工具包VI简介 已经安装好的AI工具包位于程序框图-函数选板-Addon ...

  6. 《Pro Git》Git分支笔记

    Git分支简介 在Git中,有个校验和的概念,主要用于验证数据完整性,它是一个40位16进制字符串,使用SHA-1哈希算法生成.校验和也标识了Git中每一个对象. 我们由前一章阅读了解到Git保存的是 ...

  7. Nessus 10.5.3 漏洞扫描器的下载安装与卸载

    测试环境 Kali 2023.2 本教程使用脚本进行自动化安装.破解 文章地址:https://www.iculture.cc/software/pig=25546#wznav_7 偶然发现,特别好用 ...

  8. module.exports和exports,应该用哪个

    在 Node.js 编程中,模块是独立的功能单元,可以在项目间共享和重用.作为开发人员,模块让我们的生活更轻松,因为我们可以使用模块来增强应用程序的功能,而无需亲自编写.它们还允许我们组织和解耦代码, ...

  9. 《SQL与数据库基础》03. SQL-DML

    目录 DML 数据插入 数据删除 数据更新 本文以 MySQL 为例 DML 数据插入 给指定字段添加数据: INSERT INTO 表(字段1, 字段2, ......, 字段n) VALUES(值 ...

  10. Hugging News #0904:🤗 登陆 AWS Marketplace

    每一周,我们的同事都会向社区的成员们发布一些关于 Hugging Face 相关的更新,包括我们的产品和平台更新.社区活动.学习资源和内容更新.开源库和模型更新等,我们将其称之为「Hugging Ne ...