搜档网
当前位置:搜档网 › session过期时间设置

session过期时间设置

session过期时间设置
session过期时间设置

在一般系统登录后,都会设置一个当前session失效的时间,以确保在用户没有使用系统一定时间后,自动退出登录,销毁session。

具体设置很简单:

在主页面或者公共页面中加入:

session.setMaxInactiveInterval(900);

参数900单位是秒,即在没有活动15分钟后,session将失效。

这里要注意这个session设置的时间是根据服务器来计算的,而不是客户端。所以如果是在调试程序,应该是修改服务器端时间来测试,而不是客户端。

在一般系统中,也可能需要在session失效后做一些操作,

(1)控制用户数,当session失效后,系统的用户数减少一个等,控制用户数在一定范围内,确保系统的性能。

(2)控制一个用户多次登录,当session有效时,如果相同用户登录,就提示已经登录了,当session失效后,就可以不用提示,直接登录了

那么如何在session失效后,进行一系列的操作呢?

这里就需要用到监听器了,即当session因为各种原因失效后,监听器就可以监听到,然后执行监听器中定义好的程序,就可以了。

监听器类为:HttpSessionListener类,有sessionCreated和sessionDestroyed两个方法

自己可以继承这个类,然后分别实现。

sessionCreated指在session创建时执行的方法

sessionDestroyed指在session失效时执行的方法

给一个简单的例子:

public class SessionListener implements HttpSessionListener{

public void sessionCreated(HttpSessionEvent event) { HttpSession ses = event.getSession();

String id=ses.getId()+ses.getCreationTime(); https://www.sodocs.net/doc/fb11496501.html,erMap.put(id, Boolean.TRUE); //添加用户

}

public void sessionDestroyed(HttpSessionEvent event) { HttpSession ses = event.getSession();

String id=ses.getId()+ses.getCreationTime();

synchronized (this) {

https://www.sodocs.net/doc/fb11496501.html,ERNUM--; //用户数减一

https://www.sodocs.net/doc/fb11496501.html,erMap.remove(id); //从用户组中移除掉,用户组为一个map

}

}

然后只需要把这个监听器在web.xml中声明就可以了

例如:

com.summer.kernel.tools.SessionListener

补充:

具体设置很简单,方法有三种:

(1)在主页面或者公共页面中加入:

java 代码

1.HttpSession ses = request.getSession();

2.ses.setMaxInactiveInterval(10);

session.setMaxInactiveInterval(900);

参数900单位是秒,即在没有活动15分钟后,session将失效。

这里要注意这个session设置的时间是根据服务器来计算的,而不是客户端。所以如果是在调试程序,应该是修改服务器端时间来测试,而不是客户端。

(2)也是比较通用的设置session失效时间的方法,就是在项目的

web.xml中设置

15

这里的15也就是15分钟失效.

(3)直接在应用服务器中设置,如果是tomcat,可以在tomcat目录下conf/web.xml中

找到元素,tomcat默认设置是30分钟,只要修改这个值就可以了。

在server.xml中定义context中如下定义:

xml 代码

isWARValidated="false" isInvokerEnabled="true"

isWorkDirPersistent="false"/>

需要注意的是如果上述三个地方如果都设置了,有个优先级的问题,从高到低:

(3)?(2)---?(1)--

session 失效时间分类: coreJava 2012-03-18 00:07 设置Session失效时间博客分类:

?java

WebWebsphereXML配置管理Servlet

session-timeout(web.xml)元素与session.setMaxInactiveInterval()函数

a) web app server中,如websphere里可以设置超时时间为30分钟

b)在web.xml中的session-config配置

session-timeout元素(WEB.XML文件中的元素)用来指定默认的会话超时时间间隔,以分钟为单位。该元素值必须为整数。如果 session-timeout元素的值为零或负数,则表示会话将永远不会超时。如:

1.

2. 30

3.

4. //30分钟

setMaxInactiveInterval设置的是当前会话的失效时间,不是整个web 的时间,单位为以秒计算。如果设置的值为零或负数,则表示会话将永远不会超时。常用于设置当前会话时间。

c) 在程序中手动设置

java 代码

1. session.setMaxInactiveInterval(30 * 60);

想问两个问题:

一、它们的优先级?我想C应该最优先,但a和b 呢

二、如果一个应用的多个地方设置了不同的interval,会对session有影响吗?

如后台管理用户登录设置超时时间为30分钟,前台用户登录设置超时时间为15分钟。

此时的setMaxInactiveInterval是只影响servlet容器session的实例?还是影响整个容器(如果是这个,就有问题了)

不对,是可以设置的,三种方式设置:

1. 在server.xml中定义context时采用如下定义:

defaultSessionTimeOut="3600" isWARExpanded="true"

isWARValidated="false" isInvokerEnabled="true"

isWorkDirPersistent="false"/>

2. 在web.xml中通过参数指定:

30

其中30表示30分钟

3. 在程序中通过servlet api直接修改

HttpSession ses = request.getSession();

ses.setMaxInactiveInterval(10);

设置单位为秒,设置为-1永不过期。

因为可能要用到cookie,所以学了一下,但又发现不用了,为了以后不忘,写下此篇笔记。

一、cookie简介浏览器与WEB服务器之间是使用HTTP协议进行通信的;而HTTP协议是无状态协议。也就是说,当某个用户发出页面请求时,WEB服务器只是简单的进行响应,然后就关闭与该用户的连接。因此当一个请求发送到WEB

服务器时,无论其是否是第一次来访,服务器都会把它当作第一次来对待,这样的不好之处可想而知。为了弥补这个缺陷,Netscape开发出了cookie这个有效的工具来保存某个用户的识别信息,它是一种WEB服务器通过浏览器在访问者的硬盘上存储信息的手段。它是服务器发送给浏览器的体积很小的纯文本信息。定义:cookie是Web浏览器存储的少量命名数据,它与某个特定的网页和网站关联在一起。 cookie实际上和某一网站和网页关联的,保存用户一定信息的文本文件。

二、cookie的属性除名字与值外,每个cookie有四个可选属性:

1.expires:指定cookie的生存期。默认情况下cookie是暂时的,浏览器关闭就失效。

2.path:它指定了与cookie关联在一起的网页。默认是在和当前网页同一目录的网页中有效。如果把path设置为"/",那么它对该网站的所有网页都可见了。

3.domain:设定cookie有效的域名,如果把path设置为"/",把domain设为"https://www.sodocs.net/doc/fb11496501.html,",那么 https://www.sodocs.net/doc/fb11496501.html,和

https://www.sodocs.net/doc/fb11496501.html, 的所有网页都能够访问此cookie。 4.secure:布尔值,它指定了网络上如何传输cookie。默认情况下,cookie是不安全的,

可以通过一个不安全的,普通的HTTP协议传输;若设置cookie为安全的,那么它将只在浏览器和服务器通过HTTPS或其它的安全协议连接在一起时才被传输。

三、cookie的操作 cookie可以用javascipt来操作,也可以用JSP来操作。下面给大家我写的几个例子,相信大家一看就明白了: 1.javascript 操作:

2.jsp 操作: java中有个Cookie类:javax.servlet.http.Cookie

//读取cookie的通用类,以Cookie[] 做参数传个构造函数;

package com.test;

import javax.servlet.http.*;

/**

* @author sheng_li

*

*/

public class ComCookie {

private Cookie[] cookies;

private Cookie cookie;

public ComCookie(Cookie[] cs){

cookies = cs;

}

/**

* 通过cookieName,取得cookieValue,如果没有此cookie则返回默认值

* @param cookieName

* @param defaultValue

* @return

*/

public String getCookieValue(String cookieName,String defaultValue) { for(int i=0; i< cookies.length; i++) {

Cookie cookie = cookies[i];

if (cookieName.equals(cookie.getName()))

return(cookie.getValue());

}

return(defaultValue);

}

/**

* 类方法,通过cookieName,取得cookieValue

* @param cookies

* @param cookieName

* @param defaultValue

* @return

*/

public static String getCookieValue(Cookie[] cookies,

String cookieName,

String defaultValue) {

for(int i=0; i < cookies.length; i++) {

Cookie cookie = cookies[i];

if (cookieName.equals(cookie.getName()))

return(cookie.getValue());

}

return(defaultValue);

}

}

JSP中:(以下内容来源于网络)

JSP是使用如下的语法格式来创建cookie的:Cookie cookie_name =new Cookie("Parameter","Value"); 例如:Cookie newCookie =new

Cookie("username","waynezheng"); response.addCookie(newCookie);

解释:JSP是调用Cookie对象相应的构造函数Cookie(name,value)用合适的名字和值来创建Cookie,然后 Cookie可以通过HttpServletResponse的

addCookie方法加入到Set-Cookie应答头,本例中Cookie对象有两个字符串参数:username,waynezheng。注意,名字和值都不能包含空白字符以及下列字符:@ : ;? , " / [ ] ( ) =

处理Cookie的属性看到这里,有的朋友又要问了:我光知道如何创建Cookie有什么用呀?是呀,光知道如何创建Cookie而不知道怎么使用是不够的。在JSP中,程序是通过cookie.setXXX设置各种属性,用cookie.getXXX读出cookie的属性,现把Cookie的主要属性,及其方法列于下,供大家参考:读取客户端的Cookie

类型方法名方法解释

String getComment() 返回cookie中注释,如果没有注释的话将返回空值. String getDomain() 返回cookie中Cookie适用的域名. 使用getDomain() 方法可以指示浏览器把Cookie返回给同一域内的其他服务器,而通常Cookie

只返回给与发送它的服务器名字完全相同的服务器。注意域名必须以点开始(例如https://www.sodocs.net/doc/fb11496501.html,)

int getMaxAge() 返回Cookie过期之前的最大时间,以秒计算。

String getName() 返回Cookie的名字。名字和值是我们始终关心的两个部分,笔者会在后面详细介绍 getName/setName。

String getPath() 返回Cookie适用的路径。如果不指定路径,Cookie将返回给当前页面所在目录及其子目录下的所有页面。

boolean getSecure() 如果浏览器通过安全协议发送cookies将返回true值,如果浏览器使用标准协议则返回false值。

String getValue() 返回Cookie的值。笔者也将在后面详细介绍

getValue/setValue。

int getVersion() 返回Cookie所遵从的协议版本。

void setComment(String purpose) 设置cookie中注释。

void setDomain(String pattern) 设置cookie中Cookie适用的域名

void setMaxAge(int expiry) 以秒计算,设置Cookie过期时间。

void setPath(String uri) 指定Cookie适用的路径。

void setSecure(boolean flag) 指出浏览器使用的安全协议,例如HTTPS或SSL。

void setValue(String newValue) cookie创建后设置一个新的值。

void setVersion(int v) 设置Cookie所遵从的协议版本。

在Cookie发送到客户端前,先要创建一个Cookie,然后用addCookie方法发送一个HTTP Header。 JSP将调用request.getCookies()从客户端读入Cookie,getCookies()方法返回一个HTTP请求头中的内容对应的Cookie对象数组。你只需要用循环访问该数组的各个元素,调用getName方法检查各个Cookie的名字,至找到目标Cookie,然后对该Cookie调用getValue方法取得与指定名字关联的值。

例如

<%

String userName=request.getParameter("username");//从提交的HTML表单中获取,用户名

Cookie theUsername=new Cookie("username",userName);//以"username",userName值/对创建一个Cookie

response.addCookie(theUsername);

%>

..............

<%

Cookie myCookie[]=request.getCookies();//创建一个Cookie对象数组

for(int n=0;n=cookie.length-1;i++);//设立一个循环,来访问Cookie对象数组的每一个元素

Cookie newCookie= myCookie[n];

if(newCookie.getName().equals("username")); //判断元素的值是否为username中的值

{%>

你好,<%=newCookie.getValue()%>!//如果找到后,向他问好<%}

%>

设置Cookie的存在时间,及删除Cookie 在JSP中,使用setMaxAge(int expiry)方法来设置Cookie的存在时间,

参数expiry应是一个整数。正值表示cookie将在这么多秒以后失效。注意这个值是cookie将要存在的最大时间,

而不是cookie现在的存在时间。负值表示当浏览器关闭时,Cookie将会被删除。零值则是要删除该Cookie。如:

<%

Cookie deleteNewCookie=new Cookie("newcookie",null); deleteNewCookie.setMaxAge(0);

deleteNewCookie.setPath("/");

response.addCookie(deleteNewCookie);

%>

tomcat设置session失效时间

分类: Java 2011-11-09 18:50 107人阅读评论(0) 收藏举报

tomcat在5.5以后,就没有自带admin项目了,如果要从http://localhost:8080界面进入tomcat管理页面,需要从网上下载对应的tomcat-admin.zip,举个例子,如果你的tomcat是5.5.30的,需要从

https://www.sodocs.net/doc/fb11496501.html,/download-55.cgi下载(在下载页面的Binary Distributions栏下的第四大项,Administration Web Application 即是)。解压以后,得到的文件夹里,东西都已经给你整理好了。

你只需要按照解压文件的目录,copy这些文件到$CATALINA_BASE对应的目录下,项目映射文件admin.xml中的路径稍微改下,然后重启tomcat就行了。

在tomcat的conf目录下的tomcat-user.xml文件中还需要加

roles="standard,manager,admin"/>

来添加一个admin用户,这样就可以访问tomcat的admin页面了。

同样,我们可以访问tomcat的manager页面来查看session的信息,在tomcat6.0以上的版本是自带了manager这个项目的,如果是tomcat5.5.x 的版本也需要去网上下载的,配置同admin。

这里说说session过期时间的设置,一般来说方法有四种:

1. 在tomcat——>conf——>servler.xml文件中定义:

defaultSessionTimeOut="3600" isWARExpanded="true"

isWARValidated="false" isInvokerEnabled="true"

isWorkDirPersistent="false"/> //单位是秒

2. 在web.xml中定义:这个针对具体项目

20//单位是分钟,0表示session不会失效

3. 在程序中定义:这个就针对具体页面了

session.setMaxInactiveInterval(30*60);//单位是秒

4.在conf/context.xml文件设置:这个是针对所有的项目了

打开context.xml,在节点下添加如下节点:

debug=0

saveOnRestart="true"

maxActiveSession="-1"

minIdleSwap="-1"

maxIdleSwap="-1"

maxIdleBackup="-1"

//这里代表的是文件持久化.也可以自己实现Store

saveOnRestart:(true/false)配置服务重启工程中对session的处理,若为true,则关闭前把有效的session保存,启动后重新载入maxActiveSession:活动状态Session的最大数,为-1时则不限制,否则Session Manager将会把超出的Session对象转移到Session Store中。

minIdleSwap:Session不活动的最短时间,超过该时间,Session Manager 可能会把该Session对象转移到Session Store中,单位为秒。

maxidleSwap:Session不活动的最长时间,超过该时间,Session Manager 将会把该Session对象转移到Session Store中,该Session将不在内存中。

maxidleBackup: Session不活动的最长时间,超过该时间,Session Manager 将会把该Session对象备份到Session Store中,但该Session对象依然存在内存中。

指定实现持久化的类和Session存放的文件位置,如该例子中指定的类是:org.apache.catalina.session.FileStore,而Session对象存放的目录则是tomcat根目录下的 session文件夹(当然自己创建)

在第四种配置中,配置完后可以写一个简单的jsp页面,在页面上显示本次用户访问的Session ID,然后重起tomcat,再刷新该页面,可以看到该Session Id不变,而在/session目录下自动生成一个以session id为名,以“session”为扩展名的文件。该Session的持久化配置成功。

Ehcache 2 缓存区配置详解

Ehcache 2 缓存区配置详解 第1章Ehcache简介 EhCache是一个开放源码的,基于标准的高速缓存系统。Ehcache可以显著提高应用性能,降低数据库负载,简化应用扩展。Ehcache健壮、功能齐全,也历经了众多应用考验,使得它成为使用最广泛的基于Java的缓存系统。 Ehcache可以支持从进程内的一个或多个节点的部署方式到进程内与进程外混合、高达TB 大小的高速缓存。 Ehcache目前由Terracotta公司维护,使用Apache 2 许可证。 Ehcache截止目前最新版本为2.6。支持多种方式缓存: ●Standalone模式。嵌入应用进程内。单点,多节点间无沟通。 ●Replication模式。嵌入应用内部,通过RMI或JGroup或JMS进行节点同步。 ●Cache Server模式。作为独立缓存服务器,提供REST与WebService接口供访 问。 ●Distributed Caching模式。采用Terracotta Server Array实现高可用的分布式 缓存。 Standalone与Replication均是较传统的使用方式,很多场景下难以满足动态基础设施环境下应用弹性的要求。Cache Server使得缓存服务可以容易的进行水平扩展,但是基于REST与WebService的访问方式降低了缓存访问的效率,不太适合对缓存实时性要求较高的场景。Distributed Caching模式提供了进程内与进程间缓存较理想的结合模式,支持水平扩展,高可用,对网络依赖程度较低,可以很好适应应用弹性伸缩,是动态基础设施条件下较理想的缓存模式。 第2章Ehcache 2 缓存区配置 Ehcache默认配置文件在Ehcache客户端的classpath根目录下,名为ehcache.xml。典型的配置文件如下:

asp中设置session过期时间方法总结

asp中默认session过期时间为20分钟,很多情况下不够,今天有客户要求很多就要重新登录了,所以准备了这篇文章,方便需要的朋友。 如果程序中没有设置session的过期时间,那么session过期时间就会按照IIS设置的过期时间来执行,IIS中session默认过期时间为20分钟,IIS中session时间可以更改时间设置要放在前面 例如 Session.Timeout=30 'SEESION有效时间为30分钟 Session("ID")=Rs("id") Session("Name")=Rs("Name") Session("Pass")=Rs("Pass" 利用Session.Timeout 属性设置超时时限 对于一个登录到ASP 应用程序的用户,如果用户在系统默认的时间内未进行其它任何操作,当设置的时间一到便自动撤销这个用户的Session,这样就可以防止系统的资源被浪费。Session 对象的TimeOut 属性可以用来设置“过期时间”,已分钟为单位,其设置格式为: 代码如下: Session.TimeOut=MaxTime 实例代码:(5.asp)页面,本实例说明如何控制会话的结束。 代码如下: <%@ language="vbscript" %> <% session.timeout=60 %> 控制会话的结束时间 <% who = Session.SessionID CurrentPage=Request.ServerVariables("SCRIPT_NAME") Response.AppendTolog who & ":" & CurrentPage Response.write "

你的会话标识为:" & who & "" Response.write "你当前访问的页面路径为:" & CurrentPage & "" if Session("I")="" then session("i")=1 else session("i")=session("i")+1 end if

Session对象失效的客户端解决方法

Session对象失效的客户端解决方法 魏莹李锋冯珊 问题的提出 ASP(Active Server Pages)技术的Session对象用于存储用户在对话期间的私有信息。当前用户的Session对象中定义的变量和对象能在页面之间共享,但是不能为应用中其他用户所访问,因此在用ASP开发网络应用程序时,可以利用Session对象保存和跟踪用户的状态信息。 Session对象有一个十分重要的属性:Timeout,它用于设置在会话资源被释放前,会话对象所能保持非活动状态的时间(默认值为20分钟)。当Timeout属性设置的时间值耗尽后,会话资源将被释放。通过Timeout属性破坏Session对象,避免了Session对象在服务器中无限制地产生,保护了服务器资源。但是,在实际网络开发中,常常遇到由于Session对象失效,用户状态信息丢失而导致应用流程无法正常完成的问题。 虽然利用Timeout属性释放资源的策略是出于保护服务器的目的,但是Session对象不可预知的失效性,却成为开发应用程序的一个弊病。因而在实际应用程序的开发中,必须解决Session对象失效的问题。 传统的解决方法 现有的解决方法都是采用服务器端方法解决Session对象失效问题。典型的处理方法分为两大类:失效前的处理和失效后的处理。 失效前的处理是指在Session对象尚未失效之前,对变量进行转存等处理,做到防患于未然。典型的解决方法是在应用程序中设定一个定时器,在Session对象失效前5分钟触发定时器,然后重新设置Session对象的各个变量和对象。由于必须在服务器端实时维护该定时器,并且必须保证该段程序在整个会话过程中处于激活状态,所以采用这种方法增加了服务器的额外负载。 失效后的处理是指在Session对象失效后,立即提示用户进行处理。典型的解决方法是在Session对象失效后,在服务器端保存断点,并提示用户重新登录,继续完成工作。这种方法实现简单,但是往往因为断点的不可完全自动恢复性,以及重新登录过程的复杂性,而受到最终用户的抱怨和指责。 针对以上两类解决方案的缺陷,笔者在编程实践中结合Cookie对象的特性,采用Session 对象与Cookie对象在客户端联合存取会话级变量的方法,既避免了对服务器资源的额外需求,又解决了断点不可自动恢复的问题,而且还免去了重新登录的麻烦。 新的解决方法 Cookie对象是用来存储有关当前用户数据的小信息包,它可以在浏览器和Web服务器之间传递。在Web应用中,Cookie提供了一种用于跟踪、记录每个用户位置的机制。Cookie 最常见的用处之一,就是保存一个Web应用中最后一次被访问的网络页面的时间以及日期或被访问的网址。 通常,Cookie对象在客户端Windows系统目录下Cookies子目录中以文件形式存储。存储在Cookie对象中的信息数据能够被保存较长时间,所以,可以将会话级变量备份在Cookie 对象中,在Session对象失效后,通过检索并利用Cookie对象中的信息来自动恢复断点。Cookie对象具有如下几个属性: ●Expires:设定Cookie对象到期的日期; ●Domain:将Cookie对象的传送确定为仅由Domain属性确定的成员; ●Path:确定Cookie对象传送路径;

Java分布式架构

介绍 1. 项目核心代码结构截图 jeesz-utils jeesz-config jeesz-framework jeesz-core-cms jeesz-core-gen jeesz-core-bookmark

jeesz-core-act jeesz-core-oa jeesz-core-test jeesz-core-scheduler jeesz-core-task jeesz-web-admin jeesz-web-service jeesz-web-scheduler jeesz-web-task jeesz-web-bookmark jeesz-facade-bookmark jeesz-service-bookmark jeesz-facade-task jeesz-service-task jeesz-web-mq-task 特别提醒:开发人员在开发的时候可以将自己的业务REST服务化或者Dubbo服务化 2. 项目依赖介绍

Java基础-关于session的详细解释

Java基础-关于session的详细解释 session, Java, 基础, 解释 一、术语session 在我的经验里,session这个词被滥用的程度大概仅次于transaction,更加有趣的是transaction与session在某些语境下的 含义是相同的。 session,中文经常翻译为会话,其本来的含义是指有始有终的一系列动作/消息,比如打电话时从拿起电话拨号到挂断电话这中间的一系列过程可以称之为一个session。有时候我们可以看到这样的话“在一个浏览器会话期间,...”,这里的会话一词用的就是其本义,是指从一个浏览器窗口打开到关闭这个期间①。最混乱的是“用户(客户端)在一次会话期间”这样一句话,它可能指用户的一系列动作(一般情况下是同某个具体目的相关的一系列动作,比如从登录到选购商品到结账登出这样一个网上购物的过程,有时候也被称为一个transaction),然而有时候也可能仅仅是指一次连接,也有可能是指含义①,其中的差 别只能靠上下文来推断②。 然而当session一词与网络协议相关联时,它又往往隐含了“面向连接”和/或“保持状态”这样两个含义,“面向连接”指的是在通信双方在通信之前要先建立一个通信的渠道,比如打电话,直到对方接了

电话通信才能开始,与此相对的是写信,在你把信发出去的时候你并不能确认对方的地址是否正确,通信渠道不一定能建立,但对发信人来说,通信已经开始了。“保持状态”则是指通信的一方能够把一系列的消息关联起来,使得消息之间可以互相依赖,比如一个服务员能够认出再次光临的老顾客并且记得上次这个顾客还欠店里一块钱。这一类的例子有“一个TCP s ession”或者“一个POP3 session”③。 而到了web服务器蓬勃发展的时代,session在web开发语境下的语义又有了新的扩展,它的含义是指一类用来在客户端与服务器之间保持状态的解决方案④。有时候session也用来指这种解决方案的存储结构,如“把xxx保存在session里”⑤。由于各种用于web开发的语言在一定程度上都提供了对这种解决方案的支持,所以在某种特定语言的语境下,session也被用来指代该语言的解决方案,比如经常把Java 里提供的javax.servlet.http.HttpSession简称为session⑥。 鉴于这种混乱已不可改变,本文中session一词的运用也会根据上下文有不同的含义,请大家注意分辨。 在本文中,使用中文“浏览器会话期间”来表达含义①,使用“session机制”来表达含义④,使用“session”表达含义⑤,使用 具体的“HttpSession”来表达含义⑥

EHCache介绍

EHCache介绍 简介 系统缓存是位于应用程序与物理数据源之间,用于临时存放复制数据的内存区域,目的是为了减少应用程序对物理数据源访问的次数,从而提高应用程序的运行性能. 缓存设想内存是有限的,缓存的时效性也是有限的,所以可以设定内存数量的大小,可以执行失效算法,可以在内存满了的时候,按照最少访问等算法将缓存直接移除或切换到硬盘上。 Ehcache从Hibernate发展而来,逐渐涵盖了Cahce界的全部功能,是目前发展势头最好的一个项目。具有快速,简单,低消耗,依赖性小,扩展性强,支持对象或序列化缓存,支持缓存或元素的失效,提供LRU、LFU 和FIFO缓存策略,支持内存缓存和磁盘缓存,分布式缓存机制等等特点。 2009年8月Terracotta公司并购了开源缓存项目Ehcache, Terracotta 公司的产品 Terracotta 是一个 JVM 级的开源群集框架,提供 HTTP Session 复制、散布式缓存、POJO 群集、跨越集群的JVM 来完成散布式使用顺序协调。并购后EhCache 首要的改进都集中在跟Terracotta 框架的集成上,这是一个真实意义上的企业级缓存处置方案。Ehcache1.7版本上首次加入了ehcache-terracotta组件模块,想利用terracotta来实现更方便的集群操作。 Overview Ehcache是一个开源的,用于提高访问性能的标准高速缓存,它抛弃了数据库同时易于扩展。Ehcache拥用强大的,可靠和完整的功能,这已成为最广泛使用的基于Java的高速缓存。 Ehcache可以实现TB级的高速缓存管理,可配置多个缓存节点。对于需要互联的分布式缓存应用,Ehcache的使用开源的Terracotta Sever的阵列。 Ehcache是Terracotta公司的一个长期开发、维护和支持的专业开源项目。有效基于Apache 2 license。除了开源的ehcache,Terracotta公司还提供企业版的Ehcache全天候的专业支持,咨询和培训。

java应用服务器集群环境下代码编写要注意的问题

java应用服务器集群环境下代码编写关注点 J2EE架构下,软件的部署环境为集群的情况很多,所以针对集群环境的软件 开发非常重要,所以我们在编码过程中要超前思考,以免加大后期的工作量。了解集群 什么是集群: web应用服务器集群系统,是由一群同时运行同一个web应用的服务器组成的集群系统,在外界看来,就像是一个服务器一样。为了均衡集群服务器的负载,达到优化系统性能的目的,集群服务器将众多的访问请求,分散到系统中的不同节点进行处理。从而实现了更高的有效性和稳定性,而这也正是基于Web的企业应用所必须具备的特性。 集群技术的特点 高可靠性和高可用性:通过集群技术组成的系统,可以确保数据和应用程序对最终用户的高可用性和高可靠性,也就是说当主节点上的系统崩溃时,冗余节点就从替补角色转换到正式角色,并自动投入应用,从而保证了系统运行的不间断。或者检测某一个空闲服务器,将请求分发给它,对请求进行处理,而且这一过程对用户来说,是透明的,用户察觉不到! 稳定性和可伸缩性:在系统的处理能力需要增加的时候,除了通过增加集群中每个计算机节点的单机处理能力(如通过增加CPU数量、增加内存大小等手段)外,还可以通过增加集群节点数,即通过向群集添加新的计算机节点,使服务随着处理器的添加而伸缩,从而增大应用程序吞吐量,以达到增加系统的整体处理能力的目的,完成系统的扩容。 Web应用服务器集群结构图,下面例举了weblogic和websphere集群结构图 websphere集群架构图

weblogic集群架构图 排除网络设备,由上面两幅图可以观察到,应用服务器集群包含了三部分

1.Web服务器(Web Server) Web服务器专门处理HTTP请求(request),应用的软件如Apache,IBM HTTP Server,或者自己写的代理服务等等。 2.应用程序服务器(The Application Server) 应用程序服务器是通过很多协议来为应用程序提供(serves)业务逻辑(business logic)。 3.关系数据库系统 4.消息中间件 备注:一定要清楚web服务器与应用程序服务的区别 由图我们来分析一下,集群环境下开发需要注意哪些地方? 1.Session,我们经常用session来封装用户的登录信息,那么如果集群环境下一台机器session中有,一台没用回发生什么样的情况呢?幸好各个应用服务器都有在集群环境下session复制的配置。如果配置请查阅对应的文档。另外web 开发经常用到Webwork,strut2,flex等技术,他们都对sesson的封装。他们是否也能复制呢?还要测试才行,当然理论上是可以的,呵呵!还有有的时候session 要保存到什么位置?也是个问题a)内存,b)文件c)数据库。根据实 际情况来选择吧。 2.Cache,Cache我们经常使用(我这里只说对象级缓存),如:将一些经常用到的数据缓存到内存中。这种情况下和session有些类似。有的人实例化了一个包 含HashMap的一个单例的对象,用来缓存数据,单机环境没什么问题,可是如 果是集群环境呢?会怎样?所有我们引用分布式缓存或者集中式缓存,分布式缓存有很多种如ehcache,jbosscache,oscache等,集中式缓存比较典型的就是memcached。选择分布式还是集中式根据项目的需要来定了。这里就不说了。 3.线程、定时器,如:单机环境下我们写一个单线程,如用来像其他系统上传数 据(这个数据部允许多次上传),如果程序发布在集群环境下回发生什么情况?呵呵。变成多线程了。多个计算机内的单线程同时上传数据。所以这个时候考虑的地方就很多了!!是选择故障转移还是负载均衡都是考虑的范围。定时器也雷 同。可以参考spring quartz 集群解决方案。 4.JDBC,JDBC注意的是数据库集群的情况,如weblogic集群架构图所示,编写程序时,获得JDBC链接可以这样写, Connection con = null; try {

session过期时间设置word精品文档10页

在一般系统登录后,都会设置一个当前session失效的时间,以确保在用户没有使用系统一定时间后,自动退出登录,销毁session。 具体设置很简单: 在主页面或者公共页面中加入: session.setMaxInactiveInterval(900); 参数900单位是秒,即在没有活动15分钟后,session将失效。 这里要注意这个session设置的时间是根据服务器来计算的,而不是客户端。所以如果是在调试程序,应该是修改服务器端时间来测试,而不是客户端。 在一般系统中,也可能需要在session失效后做一些操作, (1)控制用户数,当session失效后,系统的用户数减少一个等,控制用户数在一定范围内,确保系统的性能。 (2)控制一个用户多次登录,当session有效时,如果相同用户登录,就提示已经登录了,当session失效后,就可以不用提示,直接登录了 那么如何在session失效后,进行一系列的操作呢? 这里就需要用到监听器了,即当session因为各种原因失效后,监听器就可以监听到,然后执行监听器中定义好的程序,就可以了。 监听器类为:HttpSessionListener类,有sessionCreated和sessionDestroyed两个方法

自己可以继承这个类,然后分别实现。 sessionCreated指在session创建时执行的方法 sessionDestroyed指在session失效时执行的方法 给一个简单的例子: public class SessionListener implements HttpSessionListener{ public void sessionCreated(HttpSessionEvent event) { HttpSession ses = event.getSession(); String id=ses.getId()+ses.getCreationTime(); https://www.sodocs.net/doc/fb11496501.html,erMap.put(id, Boolean.TRUE); //添加用户 } public void sessionDestroyed(HttpSessionEvent event) { HttpSession ses = event.getSession(); String id=ses.getId()+ses.getCreationTime(); synchronized (this) { https://www.sodocs.net/doc/fb11496501.html,ERNUM--; //用户数减一 https://www.sodocs.net/doc/fb11496501.html,erMap.remove(id); //从用户组中移除掉,用户组为一个map } }

Ehcache是现在最流行纯Java开源缓存框架

Ehcache是现在最流行的纯Java开源缓存框架 2014-12-22 13:28 37723人阅读评论(0) 收藏举报分类: java(405) c:\t _blank Ehcache是现在最流行的纯Java开源缓存框架,配置简单、结构清晰、功能强大,最初知道它,是从hibernate的缓存开始的。网上中文的EhCache材料以简单介绍和配置方法居多,如果你有这方面的问题,请自行google;对于API,官网上介绍已经非常清楚,请参见官网;但是很少见到特性说明和对实现原理的分析,因此在这篇文章里面,我会详细介绍和分析EhCache的特性,加上一些自己的理解和思考,希望对缓存感兴趣的朋友有所收获。 一、特性一览,来自官网,简单翻译一下: 1、快速轻量 过去几年,诸多测试表明Ehcache是最快的Java缓存之一。 Ehcache的线程机制是为大型高并发系统设计的。 大量性能测试用例保证Ehcache在不同版本间性能表现得一致性。 很多用户都不知道他们正在用Ehcache,因为不需要什么特别的配置。 API易于使用,这就很容易部署上线和运行。 很小的jar包,Ehcache 2.2.3才668kb。 最小的依赖:唯一的依赖就是SLF4J了。 2、伸缩性 缓存在内存和磁盘存储可以伸缩到数G,Ehcache为大数据存储做过优化。 大内存的情况下,所有进程可以支持数百G的吞吐。 为高并发和大型多CPU服务器做优化。 线程安全和性能总是一对矛盾,Ehcache的线程机制设计采用了Doug Lea的想法来获得较高的性能。 单台虚拟机上支持多缓存管理器。

通过Terracotta服务器矩阵,可以伸缩到数百个节点。 3、灵活性 Ehcache 1.2具备对象API接口和可序列化API接口。 不能序列化的对象可以使用除磁盘存储外Ehcache的所有功能。 除了元素的返回方法以外,API都是统一的。只有这两个方法不一致:getObjectValue和getKeyValue。这就使得缓存对象、序列化对象来获取新的特性这个过程很简单。 支持基于Cache和基于Element的过期策略,每个Cache的存活时间都是可以设置和控制的。 提供了LRU、LFU和FIFO缓存淘汰算法,Ehcache 1.2引入了最少使用和先进先出缓存淘汰算法,构成了完整的缓存淘汰算法。 提供内存和磁盘存储,Ehcache和大多数缓存解决方案一样,提供高性能的内存和磁盘存储。 动态、运行时缓存配置,存活时间、空闲时间、内存和磁盘存放缓存的最大数目都是可以在运行时修改的。 4、标准支持 Ehcache提供了对JSR107 JCACHE API最完整的实现。因为JCACHE在发布以前,Ehcache的实现(如net.sf.jsr107cache)已经发布了。 实现JCACHE API有利于到未来其他缓存解决方案的可移植性。 Ehcache的维护者Greg Luck,正是JSR107的专家委员会委员。 5、可扩展性 监听器可以插件化。Ehcache 1.2提供了CacheManagerEventListener和CacheEventListener接口,实现可以插件化,并且可以在ehcache.xml里配置。 节点发现,冗余器和监听器都可以插件化。 分布式缓存,从Ehcache 1.2开始引入,包含了一些权衡的选项。Ehcache的团队相信没有什么是万能的配置。 实现者可以使用内建的机制或者完全自己实现,因为有完整的插件开发指南。 缓存的可扩展性可以插件化。创建你自己的缓存扩展,它可以持有一个缓存的引用,并且绑定在缓存的生命周期内。 缓存加载器可以插件化。创建你自己的缓存加载器,可以使用一些异步方法来加载数据到缓存里面。 缓存异常处理器可以插件化。创建一个异常处理器,在异常发生的时候,可以执行某些特定操作。

EHCache 技术文档 缓存 spring缓存

目录 0. 文档介绍 (2) 0.1文档目的 (2) 0.2文档范围 (2) 0.3读者对象 (2) 0.4参考文献 (2) 0.5术语与缩写解释 (3) 1.概述 (4) 1.1背景 (4) 1.2主要特征 (3) 1.3环境 (5) 1.4下载资源 (5) 2. EHCACHE页面缓存的配置 (5) 2.1EHC ACHE的类层次模型 (5) 2.2环境搭建 (6) 2.3 EHCACHE配置文件中元素说明................................................... 错误!未定义书签。 2.4在工程中单独使用...................................................................... 错误!未定义书签。 3. 在SPRING中运用EHCACHE ....................................................... 错误!未定义书签。 4. 分布式缓存集群环境配置 (19) 4.1集群配置方式 (19) 5. 测试用例 (28)

0. 文档介绍 0.1 文档目的 记录使用EHCache实现页面级的缓存以及完成集群设计的过程。0.2 文档范围 记录使用EHCache实现页面级的缓存以及完成集群设计的过程。0.3 读者对象 任何有兴趣的家伙。 0.4 参考文献 提示:列出本文档的所有参考文献(可以是非正式出版物),格式如下:[标识符] 作者,文献名称,出版单位(或归属单位),日期 大部分都是网络上查询的资料,很多,不列举了。

Java代码优化

1. 尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面: 第一,控制资源的使用,通过线程同步来控制资源的并发访问; 第二,控制实例的产生,以达到节约资源的目的; 第三,控制数据共享,在不建立直接关联的条件下,让多个不相关的进程或线程之间实现通信。 2. 尽量避免随意使用静态变量 要知道,当某个对象被定义为stataic变量所引用,那么gc通常是不会回收这个对象所占有的内存,如 Java代码 public class A{ static B b = new B(); } 此时静态变量b的生命周期与A类同步,如果A类不会卸载,那么b对象会常驻内存,直到程序终止。 3. 尽量避免过多过常的创建Java对象 尽量避免在经常调用的方法,循环中new对象,由于系统不仅要花费时间来创建对象,而且还要花时间对这些对象进行垃圾回收和处理,在我们可以控制的范围内,最大限度的重用对象,最好能用基本的数据类型或数组来替代对象。 4. 尽量使用final修饰符 带有final修饰符的类是不可派生的。在Java核心API中,有许多应用final的例子,例如https://www.sodocs.net/doc/fb11496501.html,ng.String.为String类指定final防止了使用者覆盖length()方法。另外,如果一个类是final的,则该类所有方法都是final的。Java编译器会寻找机会内联(inline)所有的final方法(这和具体的编译器实现有关)。此举能够使性能平均提高50%.

5. 尽量使用局部变量 调用方法时传递的参数以及在调用中创建的临时变量都保存在栈(Stack)中,速度较快。其他变量,如静态变量、实例变量等,都在堆(Heap)中创建,速度较慢。 6. 尽量处理好包装类型和基本类型两者的使用场所 虽然包装类型和基本类型在使用过程中是可以相互转换,但它们两者所产生的内存区域是完全不同的,基本类型数据产生和处理都在栈中处理,包装类型是对象,是在堆中产生实例。 在集合类对象,有对象方面需要的处理适用包装类型,其他的处理提倡使用基本类型。 7. 慎用synchronized,尽量减小synchronize的方法 都知道,实现同步是要很大的系统开销作为代价的,甚至可能造成死锁,所以尽量避免无谓的同步控制。synchronize方法被调用时,直接会把当前对象锁了,在方法执行完之前其他线程无法调用当前对象的其他方法。所以synchronize的方法尽量小,并且应尽量使用方法同步代替代码块同步。 8. 尽量使用StringBuilder和StringBuffer进行字符串连接 这个就不多讲了。 9. 尽量不要使用finalize方法 实际上,将资源清理放在finalize方法中完成是非常不好的选择,由于GC的工作量很大,尤其是回收Young代内存时,大都会引起应用程序暂停,所以再选择使用finalize方法进行资源清理,会导致GC负担更大,程序运行效率更差。 10. 尽量使用基本数据类型代替对象 String str = "hello"; 上面这种方式会创建一个"hello"字符串,而且JVM的字符缓存池还会缓存这个字符串; String str = new String("hello"); 此时程序除创建字符串外,str所引用的String对象底层还包含一个char[]数组,这个char[]数组依次存放了h,e,l,l,o

session应用详解

Session 对象 可以使用Session 对象存储特定用户会话所需的信息。这样,当用户在应用程序的Web 页之间跳转时,存储在Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。 当用户请求来自应用程序的Web 页时,如果该用户还没有会话,则Web 服务器将自动创建一个Session 对象。当会话过期或被放弃后,服务器将终止该会话。 Session 对象最常见的一个用法就是存储用户的首选项。例如,如果用户指明不喜欢查看图形,就可以将该信息存储在Session 对象中。有关使用Session 对象的详细信息,请参阅“ASP 应用程序”部分的“管理会话”。 注意会话状态仅在支持cookie 的浏览器中保留。 语法 Session.collection|property|method 集合 Contents 包含已用脚本命令添加到会话中的项目。 StaticObjects 包含通过 标记创建的并给定了会话作用域的对象。 属性 CodePage 将用于符号映射的代码页。 LCID 现场标识。 SessionID 返回用户的会话验证。 Timeout 应用程序会话状态的超时时限,以分钟为单位。 方法 Abandon 该方法破坏Session 对象并释放其资源。 事件 global.asa 文件中声明下列事件的脚本。 Session_OnEnd Session_OnStart 有关以上事件及global.asa 文件的详细信息, 请参阅Global.asa 参考. 注释 您可以在Session 对象中存储值。存储在Session 对象中的信息在会话及会话作用域内有效。下列脚本演示两种类型的变量的存储方式。 <%

判断session是否过期

前一段时间有好几个问题,提到怎么判断session是否过期。 接触jsp已经很久了,但是还真没有想过这个问题,当时也就没有找到一个满意的答案给人家。 当时,我提到一个方法,就是实现HttpSessionListener接口,然后在sessionDestroyed()方法中执行一些操作,表示session要过期了,因为这个方法是session.invalidate()之前监听器调用的方法。这个判断的方法显然不能让人满意。 我当时问了些人,但是也没有得到一个准确的答案。 正好偶然间看到,request.getSeesion(boolean)方法,一下子让我恍然大悟。这个方法里面传了一个boo lean值,这个值如果是true,那么如果当前的request的session不可用,那么就创建新的会话,如果存在就返回当前的会话。如果参数是false,那么在request的当前会话不存在的时候就返回null。 这样我们就可以很容易的联想到这个所谓的request的当前会话是否存在和session过期的联系,所以我们就可以“近似地”认为session不存在就是session过期了,那么我们就可以很容易地判断session是否过期了。方法如下: if(request.getSession(false)==null) System.out.println("Session has been invalidated!"); else System.out.println("Session is active!"); 可能大家注意到我上面有一个“近似地”字眼,也就是说存在特别情况。 这个特殊情况就是第一次请求还没有创建会话的时候,那么用这个方法返回的仍然是null,原因我想大家应该是显然的。 以上是个人拙见,希望大家指正。 if(request.getSession(false)==null){ sessin = request.getSession(true); } 俺师傅一年前就用了,不过他去大公司了555555555555555 俺也没看明白,今看老兄一贴,茅塞顿开 真实“看一贴长一智谢谢啊” private boolean checkSession(HttpServletRequest request, HttpServletResponse response) { HttpSession session = request.getSession(false); String requestURI = request.getRequestURI(); String contextPath = request.getContextPath(); requestURI = requestURI.substring(contextPath.length());

ehcache原理

转ehcache 基本原理 hjp222发表于2011-03-22 16:30 最后修改于2011-05-16 15:32 浏览(105) 评论(0)分类:ehcache 举报 ehcache是一个用Java实现的使用简单,高速,实现线程安全的缓存管理类库,ehcache 提供了用内存,磁盘文件存储,以及分布式存储方式等多种灵活的cache管理方案。同时ehcache作为开放源代码项目,采用限制比较宽松的Apache License V2.0作为授权方式,被广泛地用于Hibernate, Spring,Cocoon等其他开源系统。 Ehcache的类层次模型主要为三层,最上层的是CacheManager,他是操作Ehcache的入口。我们可以通过CacheManager.getInstance()获得一个单个的CacheManager,或者通过CacheManager的构造函数创建一个新的CacheManager。每个CacheManager都管理着多个Cache。而每个Cache都以一种类Hash的方式,关联着多个Elemenat。而Element则是我们用于存放要缓存内容的地方。 ehcache的刷新策略 ehcache的刷新策略是当缓存在放入的时候记录一个放入时间,它是用Lazy Evict的方式,在取的时候同设置的TTL比较 ehcache缓存的3种清空策略: 1 FIFO,先进先出 2 LFU,最少被使用,缓存的元素有一个hit属性,hit值最小的将会被清出缓存。 3 LRU,最近最少使用的,缓存的元素有一个时间戳,当缓存容量满了,而又需要腾出地方来缓存新的元素的时候,那么现有缓存元素中时间戳离当前时间最远的元素将被清出缓存。事件处理 可以为CacheManager添加事件监听,当对CacheManager增删Cache时,事件处理器将会得到通知。要配置事件处理,需要通过ehcache的配置文件来完成。 可以为Cache添加事件监听,当对Cache增删Element时,事件处理器将会得到通知。要配置事件处理,需要通过ehcache的配置文件来完成。 ehcache参数配置: maxInMemory - 设定内存中创建对象的最大值。 eternal - 设置元素(译注:内存中对象)是否永久驻留。如果是,将忽略超时限制且元素永不消亡。 timeToIdleSeconds - 设置某个元素消亡前的停顿时间。也就是在一个元素消亡之前,两次访问时间的最大时间间隔值。这只能在元素不是永久驻留时有效(译注:如果对象永恒不灭,则设置该属性也无用)。 如果该值是0 就意味着元素可以停顿无穷长的时间。 timeToLiveSeconds - 为元素设置消亡前的生存时间。也就是一个元素从构建到消亡的最大时间间隔值。这只能在元素不是永久驻留时有效。 overflowToDisk - 设置当内存中缓存达到maxInMemory 限制时元素是否可写到磁盘上。

session超时重新登录

1.首先在web.xml中配置过滤器: SessionFilter https://www.sodocs.net/doc/fb11496501.html,mon.web.SessionFilter SessionFilter *.sino SessionFilter *.jsp 2.SessionFilter.java文件 package https://www.sodocs.net/doc/fb11496501.html,mon.web; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import com.sinosoft.platform.system.model.SysUser; import com.sinosoft.platform.system.util.SystemUtil; import https://www.sodocs.net/doc/fb11496501.html,mon.ClientConfig; public class SessionFilter implements Filter { private FilterConfig fc = null; public void destroy() { }

Java中设置session的详细解释

Java中设置session的详细解释 一、术语session 在我的经验里,session这个词被滥用的程度大概仅次于transaction,更加有趣的是transaction和session在某些语境下的含义是相同的。 session,中文经常翻译为会话,其本来的含义是指有始有终的一系列动作/消息,比如打电话时从拿起电话拨号到挂断电话这中间的一系列过程能称之为一个session。有时候我们能看到这样的话“在一个浏览器会话期间,...”,这里的会话一词用的就是其本义,是指从一个浏览器窗口打开到关闭这个期间①。最混乱的是“用户(客户端)在一次会话期间”这样一句话,他可能指用户的一系列动作(一般情况下是同某个具体目的相关的一系列动作,比如从登录到选购商品到结账登出这样一个网上购物的过程,有时候也被称为一个transaction),然而有时候也可能仅仅是指一次连接,也有可能是指含义①,其中的差别只能靠上下文来推断②。 然而当session一词和网络协议相关联时,他又往往隐含了“面向连接”和/或“保持状态”这样两个含义,“面向连接”指的是在通信双方在通信之前要先建立一个通信的渠道,比如打电话,直到对方接了电话通信才能开始,和此相对的是写信,在你把信发出去的时候你并不能确认对方的地址是否正确,通信渠道不一定能建立,但对发信人来说,通信已开始了。“保持状态”则是指通信的一方能够把一系列的消息关联起来,使得消息之间能互相依赖,比如一个服务员能够认出再次光临的老顾客并且记得上次这个顾客还欠店里一块钱。这一类的例子有“一个TCP session”或“一个POP3 session”③。 而到了web服务器蓬勃发展的时代,session在web研发语境下的语义又有了新的扩展,他的含义是指一类用来在客户端和服务器之间保持状态的解决方案④。有时候session也用来指这种解决方案的存储结构,如“把xxx保存在session里”⑤。由于各种用于web研发的语言在一定程度上都提供了对这种解决方案的支持,所以在某种特定语言的语境下,session 也被用来指代该语言的解决方案,比如经常把Java里提供的javax.servlet.http.HttpSession简称为session⑥。 鉴于这种混乱已不可改动,本文中session一词的运用也会根据上下文有不同的含义,请大家注意分辨。 在本文中,使用中文“浏览器会话期间”来表达含义①,使用“session机制”来表达含义④,使用“session”表达含义⑤,使用具体的“HttpSession”来表达含义⑥ 二、HTTP协议和状态保持 HTTP协议本身是无状态的,这和HTTP协议本来的目的是相符的,客户端只需要简单的向服务器请求下载某些文件,无论是客户端还是服务器都没有必要纪录彼此过去的行为,每一次请求之间都是独立的,好比一个顾客和一个自动售货机或一个普通的(非会员制)大卖场之间的关系相同。