0

0

Java中servlet之session的图文代码介绍

黄舟

黄舟

发布时间:2017-07-27 15:18:37

|

1562人浏览过

|

来源于php中文网

原创

这篇文章主要介绍了servlet之session简介,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

Session是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的session对象,注意是默认情况下,一个浏览器独占一个session,由于session为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自数据存放在各自的session中,当用户再去访问服务器的其他web资源时,其他web资源再从用户各自的session中取出数据为用户服务。

Session和Cookie的主要区别:

Cookie技术是客户端技术,是由服务器将用户的数据写回给用户浏览器的。

Session技术是服务器端技术,是把用户的数据写到服务器为用户所创建的独享的Session对象中,但Session是基于Cookie的。

立即学习Java免费学习笔记(深入)”;

Session对象由服务器创建,这跟Cookie不一样。编程人员可以通过request请求对象的getSession()方法获取Session对象。

注意,Session一旦创建,是会存活无操作情况(或者浏览器关闭)下30分钟,这是由服务器(如Tomcat)来指定的。当我们关闭浏览器后,因为Session是基于cookie的,因此Session是存在的,只是我们可能无法再使用到(要看cookie是否还能取到)。

那么我们以一个简单的Session例子来说明,创建两个Servlet:分别命名为ServletDemo1和ServletDemo2。

在ServletDemo1中的代码如下:


 HttpSession session = request.getSession();
 String data = "message form SessionDemo";
 session.setAttribute("data", data);

在ServletDemo2中的代码如下:


 response.setContentType("text/html;charset=utf-8");
 PrintWriter writer = response.getWriter();
     
 HttpSession session = request.getSession();
 String data = (String) session.getAttribute("data");
 writer.write(data);

当我们打开一个浏览器先访问ServletDemo1,此时浏览器会帮我们创建Session对象,并保存数据,这时再访问ServletDemo2可以看到该保存的数据:

说明Session确实能保存访问不同Servlet时的数据。

这里说清楚一点,虽然代码都是相同的,但是针对不同浏览器访问的话看到的是不同的Session对象保存的不同的数据,虽然这时候数据都是一样的。比如说A在自己主机上访问这个Servlet和B在自己电脑上访问这个相同的Servlet,A和B得到各自的Session。

而如果我们打开一个浏览器访问ServletDemo1后,再打开另一个浏览器访问ServletDemo2,那么则会显示该数据找不到:

网奇企业网站管理系统CWMS2.0 英文版
网奇企业网站管理系统CWMS2.0 英文版

CWMS 2.0功能介绍:一、 员工考勤系统,国内首创CWMS2.0的企业员工在线考勤系统。二、 自定义URL Rewrite重写,友好的搜索引擎 URL优化。三、 代码与模板分离技术,支持超过5种类型的模板类型。包括:文章、图文、产品、单页、留言板。四、 购物车功能,CWMS2.0集成国内主流支付接口。如:淘宝、易趣、快钱等。完全可媲美专业网上商城系统。五、 多语言自动切换 中英文的说明。六、

下载

注意:这时候是两个浏览器,即已经是两个会话了!!!

我们来做一个类似于点击商品然后能加入到购物车的案例,使用Session技术。

前提准备,我们需要为商品创建JavaBean,代码如下:


 public class Product {
   private String id;
   private String name;
   private String author;
  
   public Product() {
     super();
   }
 
   public Product(String id, String name, String author) {
     super();
     this.id = id;
     this.name = name;
     this.author = author;
   }
 
   public String getId() {
     return id;
   }
 
   public void setId(String id) {
     this.id = id;
   }
 
   public String getName() {
     return name;
   }
 
   public void setName(String name) {
     this.name = name;
   }
 
   public String getAuthor() {
     return author;
   }
 
   public void setAuthor(String author) {
     this.author = author;
   }

然后再建立一个数据库,以类的方式来创建(谁让数据库还没学呢T_T!),然后使用Map集合来存储数据,便于通过键值对检索:


 public class ProductDatabase {
   
   private static Map map = new HashMap();
   
   static{
     map.put("1", new Product("1","《Java编程思想》","JB"));
     map.put("2", new Product("2","《Java核心技术》","fdaf"));
     map.put("3", new Product("3","《Java并发编程》","什么鬼"));
     map.put("4", new Product("4","《Head first 设计模式》","老王"));
     map.put("5", new Product("5","《HTML5权威手册》","hhaa"));
   }
   
   public static Map getMap() {
     
     return map;
   }
 }

好了,我们在商品显示的首页显示商品,同时为每个商品建立一个超链接,以便于当用户点击超链接时能将商品的id作为存储数据的依据由其他Servlet类获取用户购买的商品种类:


   response.setCharacterEncoding("UTF-8");
   response.setContentType("text/html;charset=utf-8");
   PrintWriter writer = response.getWriter();
     
   //获取数据库中的商品数据
   Map map = ProductDatabase.getMap();
   for(Map.Entry entry : map.entrySet()) {
     Product book = entry.getValue();
     writer.print(book.getName()+" 购买 
"); }

此时可以看一看效果:

接着我们来做 点击购买超链接后的Servlet,该Servlet需要将获取用户所购买的商品(通过id号),同时需要获取(创建)Session对象,并利用一个集合将所购买的商品存入,这个Session对象存储用户希望购买的商品,当我们跳转到购物车页面上时能从Session中取出商品并显示:


     //获取用户所购买商品的id号
     String productId = request.getParameter("id");
     Product book =   ProductDatabase.getMap().get(productId);
     
     //将用户所购买的商品加入到Session对象中保存,以便最后一起结账,类似于购物车功能
     HttpSession session = request.getSession();
     List list = (List) session.getAttribute("productList");
     if(list == null){
       //首次购买
       list = new ArrayList();
       session.setAttribute("productList", list);
     }
     
     list.add(book);
     
     //跳转到购物车列表上
     response.sendRedirect("/myservlet/servlet/CartListServlet");

注意:这里使用的是sendRedirect重定向,如果使用的是forward转发,则在购物车页面进行刷新的话会将每次购买的商品再次购买。

在购物车页面的Servlet中功能就可以比较简单了,从用户的Session中取出保存的购买商品对象,并显示在页面上即可:


     response.setCharacterEncoding("UTF-8");
     response.setContentType("text/html;charset=utf-8");
     PrintWriter writer = response.getWriter();
     
     writer.print("您购买的商品如下:  
"); HttpSession session = request.getSession(); List list = (List) session.getAttribute("productList"); for(Product p : list) { writer.write(p.getName()+"
"); }

点击多个商品,会看到在购物车的Servlet页面上会显示出我们购买的商品:

而另外开启的多个浏览器点击这些商品会看到购买的不同购物车页面,所以可以使用Session来解决不同用户来访问相同页面而同时保存他们各自不同数据的需求。

当然这只是一个简单的强调session对象能在一个会话过程中保存一个浏览器访问多个Servlet中会产生的数据,上面这样的简单示例肯定是不能用于购物的,比如当我们将浏览器关闭时(会话结束),这个session对象就结束了,那么下次再打开浏览器我们的购物车将一无所有,如果要满足用户的不同需求,那么就要了解一些session对象的底层结构

相关文章

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
c++ 根号
c++ 根号

本专题整合了c++根号相关教程,阅读专题下面的文章了解更多详细内容。

22

2026.01.23

c++空格相关教程合集
c++空格相关教程合集

本专题整合了c++空格相关教程,阅读专题下面的文章了解更多详细内容。

24

2026.01.23

yy漫画官方登录入口地址合集
yy漫画官方登录入口地址合集

本专题整合了yy漫画入口相关合集,阅读专题下面的文章了解更多详细内容。

99

2026.01.23

漫蛙最新入口地址汇总2026
漫蛙最新入口地址汇总2026

本专题整合了漫蛙最新入口地址大全,阅读专题下面的文章了解更多详细内容。

132

2026.01.23

C++ 高级模板编程与元编程
C++ 高级模板编程与元编程

本专题深入讲解 C++ 中的高级模板编程与元编程技术,涵盖模板特化、SFINAE、模板递归、类型萃取、编译时常量与计算、C++17 的折叠表达式与变长模板参数等。通过多个实际示例,帮助开发者掌握 如何利用 C++ 模板机制编写高效、可扩展的通用代码,并提升代码的灵活性与性能。

15

2026.01.23

php远程文件教程合集
php远程文件教程合集

本专题整合了php远程文件相关教程,阅读专题下面的文章了解更多详细内容。

65

2026.01.22

PHP后端开发相关内容汇总
PHP后端开发相关内容汇总

本专题整合了PHP后端开发相关内容,阅读专题下面的文章了解更多详细内容。

61

2026.01.22

php会话教程合集
php会话教程合集

本专题整合了php会话教程相关合集,阅读专题下面的文章了解更多详细内容。

63

2026.01.22

宝塔PHP8.4相关教程汇总
宝塔PHP8.4相关教程汇总

本专题整合了宝塔PHP8.4相关教程,阅读专题下面的文章了解更多详细内容。

33

2026.01.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Servlet参考手册
Servlet参考手册

共0课时 | 0人学习

Servlet基础教程
Servlet基础教程

共24课时 | 15.3万人学习

Tomcat核心原理解析
Tomcat核心原理解析

共57课时 | 6.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号