standardpes club manager存档中的sessions存哪些内容

1083人阅读
背景:& 测试部门做压力测试, 结果没压多久,就出现OutOfMemory.&原因查找,通过监控工具,发现StandardSession(org.apache.catalina.session.StandardSession)对象不断增长,毫无疑问,肯定是在不断创建Session对象.备注:一般做压力测试,每次请求都不会指定JESSESIONID值,导致Web容器认为每次请求都是新的请求,于是创建Session对象.同事负责代码Review,发现应用没有任何一个地方存放Session内容.困惑之...问题:Tomcat容器何时创建Session对象?想当然认为,只有动态存放Session内容的时候,才会创建Session对象.但是事实真得如此吗?先看Servlet协议描述:请看:getSession(boolean&create)方法:javax.servlet.http.HttpServletRequest.getSession(boolean&create)Returns&the&current&HttpSession&associated&with&this&request&or,&if&if&there&is&no&current&session&and&create&is&true,&returns&a&new&session.&If&create&is&false&and&the&request&has&no&valid&HttpSession,&this&method&returns&null.&To&make&sure&the&session&is&properly&maintained,&you&must&call&this&method&before&the&response&is&committed.简单地说:当create变量为true时,如果当前Session不存在,创建一个新的Session并且返回.getSession()方法:javax.servlet.http.HttpSession&getSession();Returns&the&current&session&associated&with&this&request,&or&if&the&request&does&not&have&a&session,&creates&one.简单的说:当当前Session不存在,创建并且返回.所以说,协议规定,在调用getSession方法的时候,就会创建Session对象.既然协议这么定了,我们再来看看Tomcat是如何实现的:(下面的描述,是基于Tomcat6.0.14版本源码)先看一张简单的类图:ApplicationContext:Servlet规范中ServletContext的实现StandardContext:Tomcat定义的Context默认实现.维护了一份SessionManager对象,管理Session对象.所有的Session对象都存放在Manager定义的Map&String,Session&容器中.StanardManager:标准的Session管理,将Session存放在内容,Web容器关闭的时候,持久化到本地文件PersistentManager:持久化实现的Session管理,默认有两种实现方式:--持久化到本地文件--持久化到数据库了解了大概的概念后,回头再来看看org.apache.catalina.connector.Request.getSession()是如何实现的.最终调用的是doGetSession(boolean create)方法,请看:protected&Session&doGetSession(boolean&create)&{&&&&&&&&//&There&cannot&be&a&session&if&no&context&has&been&assigned&yet&&&&&&&&if&(context&==&null)&&&&&&&&&&&&return&(null);&&&&&&&&//&Return&the&current&session&if&it&exists&and&is&valid&&&&&&&&if&((session&!=&null)&&&&!session.isValid())&&&&&&&&&&&&session&=&null;&&&&&&&&if&(session&!=&null)&&&&&&&&&&&&return&(session);&&&&&&&&//&Return&the&requested&session&if&it&exists&and&is&valid&&&&&&&&Manager&manager&=&null;&&&&&&&&if&(context&!=&null)&&&&&&&&&&&&manager&=&context.getManager();&&&&&&&&if&(manager&==&null)&&&&&&&&&&&&return&(null);&&&&&&//&Sessions&are&not&supported&&&&&&&&if&(requestedSessionId&!=&null)&{&&&&&&&&&&&&try&{&&&&&&&&&&&&&&&&session&=&manager.findSession(requestedSessionId);&&&&&&&&&&&&}&catch&(IOException&e)&{&&&&&&&&&&&&&&&&session&=&null;&&&&&&&&&&&&}&&&&&&&&&&&&if&((session&!=&null)&&&&!session.isValid())&&&&&&&&&&&&&&&&session&=&null;&&&&&&&&&&&&if&(session&!=&null)&{&&&&&&&&&&&&&&&&session.access();&&&&&&&&&&&&&&&&return&(session);&&&&&&&&&&&&}&&&&&&&&}&&&&&&&&//&Create&a&new&session&if&requested&and&the&response&is&not&committed&&&&&&&&if&(!create)&&&&&&&&&&&&return&(null);&&&&&&&&if&((context&!=&null)&&&&(response&!=&null)&&&&&&&&&&&&&&&context.getCookies()&&&&&&&&&&&&&&&response.getResponse().isCommitted())&{&&&&&&&&&&&&throw&new&IllegalStateException&&&&&&&&&&&&&&(sm.getString(&coyoteRequest.sessionCreateCommitted&));&&&&&&&&}&&&&&&&&//&Attempt&to&reuse&session&id&if&one&was&submitted&in&a&cookie&&&&&&&&//&Do&not&reuse&the&session&id&if&it&is&from&a&URL,&to&prevent&possible&&&&&&&&//&phishing&attacks&&&&&&&&if&(connector.getEmptySessionPath()&&&&&&&&&&&&&&&&&&&&isRequestedSessionIdFromCookie())&{&&&&&&&&&&&&session&=&manager.createSession(getRequestedSessionId());&&&&&&&&}&else&{&&&&&&&&&&&&session&=&manager.createSession(null);&&&&&&&&}&&&&&&&&//&Creating&a&new&session&cookie&based&on&that&session&&&&&&&&if&((session&!=&null)&&&&(getContext()&!=&null)&&&&&&&&&&&&&&&&&&getContext().getCookies())&{&&&&&&&&&&&&Cookie&cookie&=&new&Cookie(Globals.SESSION_COOKIE_NAME,&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&session.getIdInternal());&&&&&&&&&&&&configureSessionCookie(cookie);&&&&&&&&&&&&response.addCookieInternal(cookie,&context.getUseHttpOnly());&&&&&&&&}&&&&&&&&if&(session&!=&null)&{&&&&&&&&&&&&session.access();&&&&&&&&&&&&return&(session);&&&&&&&&}&else&{&&&&&&&&&&&&return&(null);&&&&&&&&}&&&&}至此,简单地描述了Tomcat Session创建的机制,有兴趣的同学要深入了解,不妨看看Tomcat源码实现.补充说明,顺便提一下Session的过期策略.过期方法在:org.apache.catalina.session.ManagerBase(StandardManager基类) processExpires方法:public&void&processExpires()&{&&&&&&&&long&timeNow&=&System.currentTimeMillis();&&&&&&&&Session&sessions[]&=&findSessions();&&&&&&&&int&expireHere&=&0&;&&&&&&&&&&&&&&&&if(log.isDebugEnabled())&&&&&&&&&&&&log.debug(&Start&expire&sessions&&&+&getName()&+&&&at&&&+&timeNow&+&&&sessioncount&&&+&sessions.length);&&&&&&&&for&(int&i&=&0;&i&&&sessions.&i++)&{&&&&&&&&&&&&if&(sessions[i]!=null&&&&!sessions[i].isValid())&{&&&&&&&&&&&&&&&&expireHere++;&&&&&&&&&&&&}&&&&&&&&}&&&&&&&&long&timeEnd&=&System.currentTimeMillis();&&&&&&&&if(log.isDebugEnabled())&&&&&&&&&&&&&log.debug(&End&expire&sessions&&&+&getName()&+&&&processingTime&&&+&(timeEnd&-&timeNow)&+&&&expired&sessions:&&&+&expireHere);&&&&&&&&processingTime&+=&(&timeEnd&-&timeNow&);&&&&}其中,Session.isValid()方法会做Session的清除工作.在org.apache.catalina.core.ContainerBase中,会启动一个后台线程,跑一些后台任务,Session过期任务是其中之一:protected&void&threadStart()&{&&&&&&&&if&(thread&!=&null)&&&&&&&&&&&&return;&&&&&&&&if&(backgroundProcessorDelay&&=&0)&&&&&&&&&&&&return;&&&&&&&&threadDone&=&false;&&&&&&&&String&threadName&=&&ContainerBackgroundProcessor[&&+&toString()&+&&]&;&&&&&&&&thread&=&new&Thread(new&ContainerBackgroundProcessor(),&threadName);&&&&&&&&thread.setDaemon(true);&&&&&&&&thread.start();&&&&}准确地讲,除非你的应用完全不需要保存状态(无状态应用),不然地话,只要有一个新的连接过来,web容器都需要创建Session概念,维护状态信息.但是Session是什么?Session仅仅是一个概念:&Provides a way to identify a user across more than one page request or visit to a Web site and to store information about that user.&--简单地讲,保存用户状态信息.所以说,我们完全可以根据应用的需求,定制Session的实现:a. Session保存到JVM内容中--Tomcat默认的实现b. Session保存到Cookie中--Cookie-Based Sessionc. Session保存到本地文件--Tomcat提供的非默认实现之一d. Session保存到Cache Store中--比如常见的Memcachede. Session保存到数据库中--比如保存到mysql数据库session表,中间对于活跃的Session 缓存到cached中.......那么,假如一个应用有大量一次性不同用户的请求(仅仅是一次性的,比如上述文章描述的场景),那么选择c,d,e方案都能有效解决文中所描述的问题.
版权声明:本文为博主原创文章,未经博主允许不得转载。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1075879次
积分:12891
积分:12891
排名:第413名
原创:277篇
转载:196篇
评论:306条
(2)(11)(5)(3)(6)(10)(7)(1)(8)(7)(4)(2)(2)(6)(3)(10)(7)(4)(5)(6)(4)(6)(6)(8)(8)(10)(4)(2)(11)(2)(21)(2)(8)(9)(9)(13)(6)(3)(4)(9)(6)(5)(2)(7)(1)(1)(1)(4)(1)(1)(1)(11)(5)(12)(6)(3)(1)(7)(4)(1)(1)(2)(2)(7)(7)(4)(2)(1)(3)(1)(2)(20)(32)(19)(13)(11)(5)(11)(8)memcached-session-manager配置 - 青葱岁月 - ITeye技术网站
博客分类:
声明:本篇文章是根据翻译整理,关于memcached-session-manager的介绍,具体参见官网:,也可以参考:
Introduction
如果为了简单使用,你只需要安装一个tomcat(6或者7)和memcached,在生产环境中可能会有多台tomcat服务器以及多台可用的memcached节点,并安装在不同的机器上,我们可以使用黏性session(sticky sessions)或者非黏性session(non-sticky sessions),memcached-session-manager (msm) 对这两种操作模式都支持。
下面给出一个黏性session模式的设置示例,此实例中安装了2个tomcat以及2个memcached。
Tomcat-1(t1)的首要选择是把session存储在memcached-2 (m2)上(m2是t1的一个普通节点),而m2是运行在另外的一台机器上。只有当m2不可用(宕机或无法访问)时,t1才会把session存储到memcached-1(m1,m1是t1的故障转移节点)上。使用这种配置,即使机器1宕机了session也不会丢失。具体如下图所示:
我们如何设置才能实现呢?
Decide which serialization strategy to use
从1.1版开始,MSM就提供了多种可选的session序列化策略,默认的策略是使用java进行序列化,这种实现已经集成在memcached-session-manager.jar包中了,其它的策略则可以通过不同的jar包来提供实现。在下面的章节中,我们可以了解到每种策略所需要的jar包具体有哪些。
Configure tomcat
关于tomcat的配置主要包括两个方面,首先需要下载所需要的包,放到tomcat安装目录下的lib目录下(严格来说应该是$CATALINA_HOME/lib/)以及我们应用的WEB-INF/lib/ 目录下,同时还需要修改$CATALINA_HOME/conf/context.xml文件,并在&Context&元素中添加memcached session管理的配置信息。
Add memcached-session-manager jars to tomcat
不管你选择哪种序列化策略,你都需要
,如果你使用的是tomcat6,则还需要下载
,如果使用的是tomcat7则下载
。同时还需要下载 .下载这完这些jar包后把jar包放到 $CATALINA_HOME/lib/目录。
Add custom serializers to your webapp (optional)
如果只是使用java序列化的话,那么需要的jar包就是以上所列出的那些了,但是如果想使用自定义的序列化策略(通常性能会更佳),我们还需要下载相应的jar包并放到我们webapp下的WEB-INF/lib/目录中。
如果你的应用使用了maven来进行jar包管理,那么你只需要在pom.xml中加入相应的序列化策略依赖定义就可以了,具体的maven依赖定义如下(任选一种就oK了):
kryo-serializer:
&dependency&
&groupId&de.javakaffee.msm&/groupId&
&artifactId&msm-kryo-serializer&/artifactId&
&version&1.6.0&/version&
&scope&runtime&/scope&
&/dependency&
javolution:
&dependency&
&groupId&de.javakaffee.msm&/groupId&
&artifactId&msm-javolution-serializer&/artifactId&
&version&1.6.0&/version&
&scope&runtime&/scope&
&/dependency&
&dependency&
&groupId&de.javakaffee.msm&/groupId&
&artifactId&msm-xstream-serializer&/artifactId&
&version&1.6.0&/version&
&scope&runtime&/scope&
&/dependency&
&dependency&
&groupId&de.javakaffee.msm&/groupId&
&artifactId&msm-flexjson-serializer&/artifactId&
&version&1.6.0&/version&
&scope&runtime&/scope&
&/dependency&
如果我们不是使用maven仓库来对依赖进行管理的话 ,我们需要针对每种策略下载单独需要的jar包,具体如下:
kryo-serializer: , , , , ,
javolution-serializer: ,
xstream-serializer: , , ,
flexjson-serializer: ,
Configure memcached-session-manager as &Context& Manager
处理完jar包之后,我们还需要修改 $CATALINA_HOME/conf/context.xml文件中Context节点下的内容,添加memcached-session-manager配置。
下面将会讲解关于tomcat配置的具体的示例,主要包括使用memcached来管理黏性session和非黏性session以及使用membase来管理非黏性session。示例基于的前提是假设我们有2个memcached实例,一个运行在host1主机,另一个运行在host2主机,示例使用的序列化方式为kryo。
下面我们给出tomcat1的配置,假设tomcat1和memcached节点n1都是运行在host1主机上,其中属性failoverNodes="n1"的作用是告诉msm最好是把session保存在memcached "n2"节点上,只有在n2节点不可用的情况下才把session保存在n1节点。这样即使host1主机宕机,仍然可以通过host2上的tomcat2访问存放在memcached "n2" 节点中的session。
tomcat1 configuration:
&Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1::1211"
failoverNodes="n1"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
&/Context&
以上就是tomcat1的配置信息,对于tomcat2,我们只需要修改一下failoverNodes属性的值为"n2" ,这样tomcat2就会优先把session存放到memcached "n1"节点,其余配置信息都一样。
下面演示一个非黏性session管理的配置示例,对于非黏性的session管理,我们不需要配置failoverNodes属性,因为所有sessions在tomcat集群中是循环可见的,并不会绑定到某一个单独的tomcat,对于非黏性session管理,集群中的所有tomcat都是用同一个配置,具体信息如下:
&Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1::1211"
sticky="false"
sessionBackupAsync="false"
lockingMode="uriPattern:/path1|/path2"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
&/Context&
如果是使用membase来对session进行管理,那么则某一个节点的配置如下:
&Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes=":8091/pools"
username="bucket1"
password="topsecret"
memcachedProtocol="binary"
sticky="false"
sessionBackupAsync="false"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
&/Context&
在context.xml中配置完msm之后, 我们就可以启动我们的应用程序了,这样所有的session将会根据系统配置存储到指定的memcached节点或者membase中。
Overview over memcached-session-manager configuration attributes
className (required)
类名:de.javakaffee.web.msm.MemcachedBackupSessionManager
memcachedNodes (required)
memcached节点:此属性应该包含所有运行的memcached节点或者membase bucket的uri地址,每一个memcached节点的属性定义格式为&id&:&host&:&port&,多个节点定义直接使用空格或者逗号分隔,形如:memcachedNodes="n1:app01:11211,n2:app02:11211",如果只有单个的memcached节点,则&id&是可选项,只需配置&host&:&port&即可,形如:memcachedNodes="localhost:11211"。
如果我们配置的是membase,那么从1.6.0版本开始,我们可以配置指定一个或者多个membase bucket uris,形如:http://host1:8091/pools,http://host2:8091/pools。Bucket 名称和密码通过属性username,password来定义。membase buckets连接需要遵循memcached协议,传输数据通过二进制流方式。
failoverNodes (optional, must not be used for non-sticky sessions)
故障转移节点:可选项,对非黏性session不可用,属性必须包含memcached节点集群的所有ids。节点id之间用空格或者逗号分隔。
username (since 1.6.0, optional)
从1.6.0版开始使用,并且是可选的。用来进行membase bucket或者SASL验证。
password (since 1.6.0, optional)
从1.6.0版开始使用,并且是可选的。用来进行membase bucket或者SASL验证,密码可以为空。
memcachedProtocol (since 1.3, optional, default text)
定义memcached协议,默认使用text文本
sticky (since 1.4.0, optional, default true)
定义session方式为黏性或非黏性,默认为true
lockingMode (since 1.4.0, optional, for non-sticky sessions only, default none)
只有非黏性session才使用,默认值为none
none: 从不对session进行锁定
all: session将一直被锁定,直到请求结束
auto: 对于只读请求,session将不会被锁定,如果是非只读请求,则session会被锁定
uriPattern:&regexp&: 通过正则表达式的方式来对请求uri以及查询字符串进行匹配,只有匹配上的才会被锁定。
requestUriIgnorePattern (optional)
sessionBackupAsync (optional, default true)
backupThreadCount (since 1.3, optional, default number-of-cpu-cores)
sessionBackupTimeout (optional, default 100)
operationTimeout (since 1.6.0, optional, default 1000)
sessionAttributeFilter (since 1.5.0, optional)
transcoderFactoryClass (since 1.1, optional, default de.javakaffee.web.msm.JavaSerializationTranscoderFactory)
序列化接口实现:
Java serialization: de.javakaffee.web.msm.JavaSerializationTranscoderFactory
based serialization: de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory
Javolution based serialization: de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory
XStream based serialization: de.javakaffee.web.msm.serializer.xstream.XStreamTranscoderFactory
copyCollectionsForSerialization (since 1.1, optional, default false)
customConverter (since 1.2, optional)
enableStatistics (since 1.2, optional, default true)
enabled (since 1.4.0, optional, default true)
浏览 16822
chenzhou123520
浏览: 785848 次
来自: 北京
你好,我在将maven项目转化成web项目的时候没有生成web ...
通过用户表的email 查询,符合条件的贴子--------- ...
可以参考最新的文档:如何在eclipse jee中检出项目并转 ...tomcat session 持久化 - 潇湘客 - ITeye技术网站
博客分类:
最近对tomcat比较感兴趣,会陆续的发一些学习tomcat的心得。
今天看的是tomcat session持久化,关于session持久化我上官网上除了API没有找到相关的文档,只有在其它论坛网站上有很多哥们提到了。
所谓session持久化就是将内存中的session保存到磁盘(文件)中,Tomcat有两种标准的持久化方案:
一种是保存在文件,另外一种是保存在数据库中。虽然session持久化用的很少,了解下还是可以的。
默认情况下Tomcat提供的是StandardManager管理
org.apache.catalina.session.StandardManager
StandardManager 里面提供了很多参数来管理,诸如maxActiveSessions,pathname,
maxInactiveInterval.... 还提供了load和unload方法来加载和持久化session。
修改配置文件catalina_home/conf/context.xml,取消注释的Manager
&!-- Uncomment this to disable session persistence across Tomcat restarts --&
&Manager pathname="" /&
当你正常关闭(直接关闭进程不算)tomcat的时候,tomcat会将session保存在 catalina_home/work/catalina/localhost/项目名称/session.ser文件中。
一、保存在文件中
StandardManager可以保存在文件中,还有FileLoad也可以保存在文件中,不过FileLoad需要PersistentManager的帮助。这对我们来说更加的方便了,因为持久化逻辑,和持久化的动作分开了。
我们在catalina_home/conf/context.xml中添加如下配置信息:
&Manager className="org.apache.catalina.session.PersistentManager"&
saveOnRestart="true"
maxActiveSession="-1"
minIdleSwap="-1"
maxIdelSwap="-1"
&Store className="org.apache.catalina.session.FileStore" directory="../session"/&
&/Manager&
重启之后,让服务器产生session,然后正常关闭。
持久化的session文件在catalina_home/work/catalina/localhost/session下
二、保存在数据库中
使用tomcat中
org.apache.catalina.JDBCStore
具体参数看源码吧,这里我上网上找了一个配置:
&Store calssName="org.apache.catalina.JDBCStore" driverName="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost/session?usename=xxx&password=xxx"
sessionTable="session" sessionIdCol="session_id" sessionDataCol="session_data"
sessionValidCol="sessionValid" sessionMaxInactiveCol="maxInactive"
sessionLastAccessedCol="lastAccess" sessionAppCol="appName" checkInterval="60" debug="99" /&
这样就能把session 保存到数据库中了。
三、自定义存储方式
看看三个类之间的关系:
StandardManager extends ManagerBase
PersistentManager extends PersistentManagerBase
PersistentManagerBase extends ManagerBase
FileStore extends StoreBase
JDBCStore extends StoreBase
所以我们如果想改变存储的方式,如果想存缓存中(eg: memcached这样的)
我们可以写一个类继承StoreBase即可,我这里写了一个简单的,里面什么功能都没有,只是一些简单的systemout 来演示下:
package cn.
import org.apache.catalina.S
import org.apache.catalina.session.StoreB
public class MySessionStore extends StoreBase{
public Session load(String s) throws ClassNotFoundException, IOException {
System.out.println("---------invoke load method------------");
public void remove(String s) throws IOException {
System.out.println("---------invoke remove method------------");
public void save(Session session) throws IOException {
System.out.println("---------invoke save method------------");
public void clear() throws IOException {
System.out.println("---------invoke save method------------");
public int getSize() throws IOException {
System.out.println("---------invoke save method------------");
public String[] keys() throws IOException {
System.out.println("---------invoke save method------------");
打成一个jar包,放入catalina_home/lib中,同理修改context.xml文件
&Manager className="org.apache.catalina.session.PersistentManager"&
saveOnRestart="true"
maxActiveSession="-1"
minIdleSwap="-1"
maxIdelSwap="-1"
&Store className="cn.tang.MySessionStore"/&
&/Manager&
重启之后,你会发现每个方法会有输出,关于如果写入到第三方缓存中,这是另一个话题了,有机会再说。
PS: 关于Session和Memcached已经有成熟的解决方案了,感兴趣的可以看下面的链接,
浏览: 150949 次
来自: 永州
wenwxy418 写道tomcat不在同一台电脑时,修改配置 ...
tomcat不在同一台电脑时,修改配置使membership和 ...
我也是这个问题,纠结了一个礼拜,
HKEY_LOCAL_MACHINE\SOFTWARE\Jav ...
sanhye 写道求提供sshd-core-0.10.1.ja ...tomcat session持久化
tomcat session持久化
tomcat6 中关闭服务 会自动把session持久化?存储在work目录下的 一个session.ser?对于Session的管理,tomcat两个实现类:org.apache.catalina.session.StandardManager和org.apache.catalina.session.PersistentManager?StandardManager? 默认的方法 可以配置的地方比较少?PersistentManager? 提供了很灵活的管理方式 配置性强?网上实现配置PersistentManager 这种例子好多好多 大多是两种形式?形式一:存储在本地文件中:配置conf目录里的context.xml文件?在&Context&节点下添加如下&Manager&节点:?&Manager className=&org.apache.catalina.session.PersistentManager& &???? debug=0???? saveOnRestart=&true&???? maxActiveSession=&-1&???? minIdleSwap=&-1&???? maxIdleSwap=&-1&???? maxIdleBackup=&-1&???? &Store className=&org.apache.catalina.session.FileStore& directory=&../session& /&?&/Manager&?形式二:存储在数据库中 配置store节点?&Store calssName=&org.apache.catalina.JDBCStore& driverName=&com.mysql.jdbc.Driver&?connectionURL=&jdbc:mysql://localhost/session?usename=xxx&password=xxx&?sessionTable=&session& sessionIdCol=&session_id& sessionDataCol=&session_data&?sessionValidCol=&sessionValid& sessionMaxInactiveCol=&maxInactive&?sessionLastAccessedCol=&lastAccess& sessionAppCol=&appName& checkInterval=&60& debug=&99& /&?关于节点的说明如下图:??className:Session的管理类,tomcat将会通过定义的接口来应用该类生成的对象。?debug:Session管理器的跟踪级别。?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对象依然存在内存中。?&Store&指定实现持久化的类和Session存放的文件位置,如该例子中指定的类是:org.apache.catalina.session.FileStore,而Session对象存放的目录则是tomcat根目录下的 session文件夹(当然自己创建)?记下在复制session中遇到的一个异常:?IOException while loading persisted sessions: java.io.WriteAbortedException?原来要让session存储的类没有序列化 引起io异常 在类后面实现Serializable 接口 (implements?? java.io.Serializable? )为什么要序列化呢??序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间.?原因就在这里 序列化是将对象转换为容易传输的格式的过程 所以session序列化才能更好的传输和存储?不只是session 要存储一个对象 保存成文件 都需要序列化。?以前认为序列化?用处不大 所以尽量不用 结果问题就找过来了? 做程序还是得严谨啊?
MySQL, the worlds most popular open-source database, fills an important niche in Suns software stack. With Suns reach and resources, MySQL is poised for even wider adoption.
内存问题困扰, 运行一定时间(一般几天)后内存消耗的差不多,前端 apache 就无法连接
apache 的?报错 :
[Sun Mar 20 05:56:00 2011] [error] ajp_read_heade
2 标签中是使用?OGNL 来访问对象属性或方法的,也就是访问的 ValueStack 中的值,即 OgnlValueStack。OGNL 也能让你直接访问类的静态变量和静态方法,标准写法是: @类全限定名@静
项目碰到如下需求:web服务器需要调用局域网内其他机器上的图片文件,用于让用户在浏览器中查看!
实现方法:
1)通过windows的“映射网络驱动器”功能将存储图片文件的机器映射到服务器上,假设
Tools 3.2 Beta 2版本发布了!开发人员称这将是正式版发布前的最后一个Beta版。正式版预计下个月就会发布。?
Tools 原名为
IDE,现在统一改名为
@Inject 注解在
2 框架中被大量使用, @Inject 注解可在方法, 构造函数, 字段, 参数上使用
2 的 @Inject定义
@Target({METHOD, CONSTRUCTOR, FIELD, PARAMETER})
一、运行环境的安装 1、率先该当安装Java Development Kit,又称Java 2 SDK,最新?**?.4.0,能够从/j2se/下载,安装在C:/j2sdk下(能够改动)。 2、
安装软件jakarta
在外部显式的使用memcache来替代session,虽然可以达到各个服务器session共享的目的,但是改变了开发人员获取session的方式。 本篇介绍的方法可以在不重构原来代码,不改变代码习惯的情况下,实现
中部署Java Web应用程序有两种方式:静态部署和动态部署。在下文中$CATALINA_HOME指的是
根目录。? 一、静态部署?
静态部署指的是我们在服务器启动之前部署我们的程序,只有
目录: 1,
与Servlet容器 ?? 1.1
简介 ?? 1.2 Servlet容器响应客户请求的过程 2,
组件结构 ?? 2.1 组件基本结构 ?? 2.2 组件介绍 ?? 2.3 组件分类 ?? 2.4 组件关系
Powered by
[ RssXN(build:
070517 Asp.net 2.0)]
每隔1小时自动更新一次}

我要回帖

更多关于 pes club manager存档 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信