基于Javaweb内置对象session的仿真
2019-10-21汪美
摘要:在Javaweb开发过程中,为便于多个页面之间信息的共享,经常会使用Session内置对象在多个页面之间进行会话。本文从内置对象Session诞生开始,简要介绍其运行机理,并对其常用函数进行分析与仿真,便于读者深入理解其内部机制并更好的利用此类函数。
关键词:Session;Cookie;仿真;信息共享
1 概述
web应用允许多个客户端同时访问,为实现不同用户之间的信息共享,又要保证不同用户之间信息互不影响,这时常常会用到内置对象Session。那么内置对象Session是如何对不同用户中的共享变量进行操作的呢?不同用户之间的信息如何保证互不影响的呢?每个用户对web应用的访问都是由多个请求和响应页面组成的,那么如何在地址改变的情况下操作多页面间的共享变量呢?
2 Session与Cookie
当我们从浏览器打开一个页面时,都会用到HTTP协议,然而HTTP协议是一种无状态协议。服务器不会保留请求的任何信息,下一次客户端进行请求时,服务器没有方法可以将它与其他客户端区别开来,这就是Http的协议无状态性。[1]那么应如何实现对不同地址的页面进行信息共享。为解决此问题Cookie诞生了。Cookie是一种客户端存储数据方式,将少量信息存储在本地以实现不同页面之间共享到相同信息。但是Cookie存在于客户端,并且它本身存储大小也有限,可以随意的修改,很不安全。此时一种新的存储会话机制Session应运而生。Cookie机制采用的是在客户端保持状态的方案.而Session机制采用的是在服务器端保持状态的方案。[2]
3 Session机制与常用函数
3.1 运行机制
Session是用来保持不同用户状态并基于Web服务器的会话方法。Session允许不同用户基于Web服务器内存在整个用户会话过程中保持任何对象。
一个会话开始时,Servlet容器为HttpSession分配唯一一个标识符,称为Session ID,Servlet容器把Session ID作为cookie保存在客户端浏览器中,每次客户发送Http请求时,Servlet容器可以从HttpServletRequest对象中读取Session ID,并根据Session ID找到相应的HttpSession对象,从而获取客户的状态信息。Session通过getID的方式产生一个Session ID,并通过Cookie的形式写入客户端,客户端再通过请求,将该ID返回给服务器端,因此服务器就知道与客户端对应的Session对象是哪一个。当客户第一次访问Web应用中支持Session的某个页面时,就会创建一个新的Session。由于Session过多会给服务器造成超大负荷,因此产生了Session的生命周期的概念,Servlet容器会在生命周期结束时将Session所占用的资源释放掉。
3.2 常用函数
其最常用的方法有void setAttribute(String,Object)和Object getAttribute(String),以实现不同页面之间变量的保存和获取。下文中将对这两个函数进行仿真,以便学习者对Sesison有更深一步的认识和理解。
4 session的仿真
其实在JAVA中Session的实现是基于多级联的Map容器。首先建立一个Java类MySession来模拟web中的Session。因为要实现仿真,在两个函数的参数列表中分别多加一个参数来实现对不同用户信息的存储,由此先得到仿真函数雏形:
static Map
static void setAttribute(String client,String key,Object value)
{
Map
if(client0 == null)
{
client0 = new HashMap();
client0.put(client,client0);
}
else
client0.put(key,value);
}
static Object getAttribute(String client,String key)
{
Map
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-),女,汉族,辽宁阜新人,本科,研究方向:计算机科学。