DOI :10.19392/j.cnki.1671-7341.201910065
基于Javaweb 内置对象session 的仿真
辽宁师范大学计算机与信息技术学院
辽宁大连
116000
摘要:在Javaweb 开发过程中,为便于多个页面之间信息的共享,经常会使用Session 内置对象在多个页面之间进行会话。本文从内置对象Session 诞生开始,简要介绍其运行机理,并对其常用函数进行分析与仿真,便于读者深入理解其内部机制并更好的利用此类函数。
关键词:Session ;Cookie ;仿真;信息共享1概述
web 应用允许多个客户端同时访问,为实现不同用户之间
的信息共享,
又要保证不同用户之间信息互不影响,这时常常会用到内置对象Session 。那么内置对象Session 是如何对不同用户中的共享变量进行操作的呢?不同用户之间的信息如何保证互不影响的呢?每个用户对web 应用的访问都是由多个请求和响应页面组成的,那么如何在地址改变的情况下操作多页面间的共享变量呢?
我的世界java模拟器2Session 与Cookie
当我们从浏览器打开一个页面时,都会用到HTTP 协议,然而HTTP 协议是一种无状态协议。服务器不会保留请求的任何信息,下一次客户端进行请求时,服务器没有方法可以将
它与其他客户端区别开来,
这就是Http 的协议无状态性。[1]
那么应如何实现对不同地址的页面进行信息共享。为解决此问题Cookie 诞生了。Cookie 是一种客户端存储数据方式,将少量信息存储在本地以实现不同页面之间共享到相同信息。但是Cookie 存在于客户端,并且它本身存储大小也有限,可以随意
的修改,
很不安全。此时一种新的存储会话机制Session 应运而生。Cookie 机制采用的是在客户端保持状态的方案.而
Session 机制采用的是在服务器端保持状态的方案。
[2]
3Session 机制与常用函数3.1运行机制
Session 是用来保持不同用户状态并基于Web 服务器的会话方法。Session 允许不同用户基于Web 服务器内存在整个用户会话过程中保持任何对象
一个会话开始时,
Servlet 容器为HttpSession 分配唯一一个标识符,
称为Session ID ,Servlet 容器把Session ID 作为cookie 保存在客户端浏览器中,每次客户发送Http 请求时,
Servlet 容器可以从HttpServletRequest 对象中读取Session ID ,并根据Session ID 到相应的HttpSes
sion 对象,从而获取客户的状态信息。Session 通过getID 的方式产生一个Session ID ,并通过Cookie 的
形式写入客户端,
客户端再通过请求,将该ID 返回给服务器端,因此服务器就知道与客户端对应的Session 对象是哪一个。当客户第一次访问Web 应用中支持Session 的某个页面时,就会创建一个新的Session 。由于Session 过多会给服务器造成超大负荷,
因此产生了Session 的生命周期的概念,
Servlet 容器会在生命周期结束时将Session 所占用的资源释放掉。
3.2常用函数
其最常用的方法有void setAttribute (String ,
Object )和Object getAttribute (String ),以实现不同页面之间变量的保存和获取。下文中将对这两个函数进行仿真,以便学习者对Sesison 有更深一步的认识和理解。4session 的仿真
其实在JAVA 中Session 的实现是基于多级联的Map 容器。首先建立一个Java 类MySession 来模拟web 中的Session 。因为要实现仿真,在两个函数的参数列表中分别多加一个参数来实
现对不同用户信息的存储,
由此先得到仿真函数雏形:static Map<String ,Map<String ,Object>>m =new HashMap ();
static void setAttribute (String client ,String key ,Object value ){
Map<String ,Object>client0=m.get (client );if (client0==null ){
client0=new HashMap ();client0.put (client ,client0);}else
client0.put (key ,value );}
static Object getAttribute (String client ,String key ){
Map<String ,Object>client0=m.get (client );if (client0==null )return null ;
return client0.get (key );}
对于一个基于JAVA 技术的多线程仿真机制来讲,需要由Java 来提供线程组类,线程管理和控制的方法则需要由线程组
来提供,
便于开发人员开发。[3]
基于此,利用Java 多线程配合不同浏览器模拟多个用户使用web 同一应用实现不同页面的信息存储。
5结语实际上,我们经常使用的函数都是基于简单的知识点拼接
而成。本次仿真也是如此,
首先了解Session 的产生背景,通过产生的背景发现机制的本质。其次掌握Session 的主要用途,经过仿真,我们能够深入理解,更能更好的使用此机制。
参考文献:[1]冉春玉,陈建军.基于JSP /Servlet 的Http 协议无状态性
解决方案.武汉理工大学学报,
2003,25(1):77-80.[2]张瑞兴,张翠梅.Cookie 和Session 机制的初步探讨.考
试周刊,2008,(36):170-171.[3]卢凤伟.Java 技术的发展趋势分析.数字通信世界,2017,(5):101-102.
作者简介:汪美(1998-),女,汉族,辽宁阜新人,本科,研究
方向:计算机科学。
4
7电子信息
科技风2019年4月

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。