要求两个tomcat共用一个session,可以引用外部缓存(
memcached),将session统一放在memcached里面,这样的话,两个tomcat就共用一个session,问题解决了。
下面是我做的一些实验:
1、先做好准备工作
将要用的的工具找到:memcached.exe、tomcat6
用到的包:memcached-session-manager-1.5.1.jar、memcached-session-manager-tc6-1.5.1.jar、msm-javolution-serializer-1.5.1.jar、javolution-5.5.1.jar、memcached-2.5.jar(全部在附件中,tomcat6网上应该很好找,自己下)。
2、安装memcached
a、memcached.exe放在一个路径下(例如:D:\memcached)
b、cmd进入到此路径下,执行
memcached.exe -d install,即安装memcached,完成后再执行
memcached.exe -d start,即启动服务,
以后memcached将会作为系统的一个服务自动启动。现在去系统服务下看,如果有memcached且已启动,说明安装成功。
(memcached的默认端口是11211)
3、安装部署tomcat
a、下载免安装版tomcat但是要
注意设置jdk环境变量即jdk安装路径(JAVA_HOME)
b、复制两份tomcat配置两个tomcat的端口,其中一个不动修改另外一个:
<Server port="8006" shutdown="SHUTDOWN">:原来是8005注意
端口改成四位数
<Connector executor="tomcatThreadPool"
port="8087" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" /> :原来是8080
<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />:原来是8009
启动两个服务器,能一起跑起来,进行下一步。
4、将上面准备的包全部放在两个tomcat的lib下并配置。
再在
context.xml中加上配置:
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:192.168.1.101:11211"
sticky="false"
sessionBackupAsync="false"
lockingMode="auto"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.JavaSerializationTranscoderFactory"
/>
n1:localhost:11211:memcached服务的接口,11211为memcached的默认端口,现在装在本地的所以为localhost:11211。
在同时运行下tomcat,成功启动,说明配置没错,现在就进行测试了:
5、测试
附件中的test即为测试项目。分别部署在两个tomcat下,启动,在同一个浏览器访问两个不同的项目,根据页面显示的sessionID,发现是一样的。
参考:
http://blog.csdn.net/a__java___a/article/details/8738932