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小时内删除。
发表评论