很多时候我们支配运用会创造点击其他页面总要重新登录,这种一样平常是会话问题,系统访问的时候总是无法保持会话,本文紧张是通过配置tomcat集群来实现session共享!

1、配置tomcat8080和tomcat9090端口

修正tomcat9090配置文件server.xml

jsp页面获取session的idwin下tomcat集群实现u0026session共享 Ruby

<Server port=\"大众9005\公众 shutdown=\"大众SHUTDOWN\"大众> <Connector port=\"大众9090\公众 protocol=\公众HTTP/1.1\"大众 connectionTimeout=\"大众20000\"大众 redirectPort=\公众8443\公众 /> <Connector port=\"大众9009\公众 protocol=\"大众AJP/1.3\"大众 redirectPort=\"大众8443\公众 />

2、设置tomcat集群

修正tomcat的配置文件,打开conf下的server.xml文件,找到下面这一行

<Engine name=\"大众Catalina\公众 defaultHost=\"大众localhost\公众>

不须要做任何修正,在这一行的下面加入如下代码

<Cluster className=\"大众org.apache.catalina.ha.tcp.SimpleTcpCluster\公众 channelSendOptions=\"大众8\"大众> <Manager className=\"大众org.apache.catalina.ha.session.DeltaManager\"大众 expireSessionsOnShutdown=\"大众false\"大众 notifyListenersOnReplication=\"大众true\"大众/> <Channel className=\"大众org.apache.catalina.tribes.group.GroupChannel\"大众> <Membership className=\"大众org.apache.catalina.tribes.membership.McastService\"大众 address=\公众228.0.0.4\"大众 port=\"大众45564\公众 frequency=\"大众500\"大众 dropTime=\"大众3000\"大众/> <Receiver className=\"大众org.apache.catalina.tribes.transport.nio.NioReceiver\"大众 address=\公众auto\"大众 port=\"大众4000\公众 autoBind=\公众100\"大众 selectorTimeout=\"大众5000\"大众 maxThreads=\公众6\"大众/> <Sender className=\"大众org.apache.catalina.tribes.transport.ReplicationTransmitter\"大众> <Transport className=\"大众org.apache.catalina.tribes.transport.nio.PooledParallelSender\"大众/> </Sender> <Interceptor className=\公众org.apache.catalina.tribes.group.interceptors.TcpFailureDetector\公众/> <Interceptor className=\"大众org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor\"大众/> </Channel> <Valve className=\公众org.apache.catalina.ha.tcp.ReplicationValve\"大众 filter=\"大众\"大众/> <Valve className=\"大众org.apache.catalina.ha.session.JvmRouteBinderValve\公众/> <Deployer className=\"大众org.apache.catalina.ha.deploy.FarmWarDeployer\"大众 tempDir=\公众/tmp/war-temp/\"大众 deployDir=\公众/tmp/war-deploy/\"大众 watchDir=\"大众/tmp/war-listen/\"大众 watchEnabled=\公众false\公众/> <ClusterListener className=\公众org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener\"大众/> <ClusterListener className=\"大众org.apache.catalina.ha.session.ClusterSessionListener\公众/> </Cluster>

这个便是tomcat自带的集群配置了,在tomcat官方文档中的cluster-howto.html中看到干系把稳事变,个中有一条须要把稳一下:Make sure your web.xml has the <distributable/> element

很明显是说web项目的web.xml文件中须要有<distributable/>这个元素,以是在引入的web项目中做修正。

3、修正项目

在\tomcat\webapps\下新建testcluster文件夹,testcluster下新建index.jsp获取SessionID

<html><head><title>title</title><meta http-equiv=\"大众Content-Type\"大众content=\"大众text/html; charset=gb2312\"大众/> </head><body>​ SessionID:<%=session.getId()%> <BR> SessionIP:<%=request.getServerName()%> <BR> SessionPort:<%=request.getServerPort()%> <% out.println(\"大众This is Tomcat Server 8080\"大众); %> ​</body></html>

testcluster下建立WEB-INF文件夹,在WEB-INF下新建web.xml指向index.jsp和添加<distributable/>元素

<?xml version=\"大众1.0\"大众 encoding=\公众UTF-8\公众?><!-- PublicCMS利用Servlet3.0技能,Web.xml不再是全体工程的入口,config.initializer.Initializer为工程的入口类,config.Config为Spring配置 --><web-app xmlns:xsi=\公众http://www.w3.org/2001/XMLSchema-instance\"大众 xmlns=\公众http://java.sun.com/xml/ns/javaee\"大众 xsi:schemaLocation=\公众http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd\"大众 id=\"大众WebApp_ID\"大众 version=\公众3.0\公众> <display-name>elearning</display-name> <distributable/>​ <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list></web-app>

把稳:由于\conf\content.xml配置了web.xml指向是要放在WEB-INF下,以是web.xml须要放在WEB-INF里面

D:\tomcat集群\tomcat8080\conf\content.xml

<Context>​ <!-- Default set of monitored resources --> <WatchedResource>WEB-INF/web.xml</WatchedResource>​ <!-- Uncomment this to disable session persistence across Tomcat restarts --> <!-- <Manager pathname=\"大众\公众 /> -->​ <!-- Uncomment this to enable Comet connection tacking (provides events on session expiration as well as webapp lifecycle) --> <!-- <Valve className=\公众org.apache.catalina.valves.CometConnectionManagerValve\"大众 /> -->​</Context>

4、启动tomcat并测试

启动tomcat:

D:\tomcat集群\tomcat8080\bin\startup.bat

D:\tomcat集群\tomcat9090\bin\startup.bat

测试地址:

http://localhost:8080/testcluster/index.jsp

http://localhost:9090/testcluster/index.jsp

每个浏览器会有不同的SessionID,但同个浏览器访问不同端口所获取的SessionID同等

附:tomcat集群配置参数

以上关于tomcat集群的配置只要在 <Engine> 节点 或者 <Host> 节点内部加高下面的代码即可支持集群化:

<Cluster className=\"大众org.apache.catalina.ha.tcp.SimpleTcpCluster\"大众/>

该配置将开启 all-to-all session 复制,并通过 DeltaManager 来复制 session 增量. 采取 all-to-all 办法意味着 session 会被复制到此集群中其他的所有节点. 对付很小的集群,这种办法很适用, 但我们不推举在较大的集群中利用(有很多 tomcat 节点的情形。
例如,几十个节点及以上...). 其余,利用 delta 增量管理器时,纵然 某些节点没有支配运用程序,也会复制 session 到所有节点上.

要在较大的集群上进行session复制,须要利用 BackupManager. 此 manager 只复制 session 数据到一个备份节点, 并且只复制到支配了对应运用程序的那些节点. BackupManager的缺陷: 经由测试,性能不如 delta manager.

下面是一些主要的默认值:

1. 默认的 Multicast (组播)地址是: 228.0.0.4

2. 默认的 Multicast (组播)端口是: 45564 (端口号和地址组合往后就决定了 cluster 关系,被认为是同一个集群).

3. 默认广播的IP java.net.InetAddress.getLocalHost().getHostAddress() (确保你不是广播到 127.0.0.1, 这是一个常见的缺点)

4. 默认的监听复制的 TCP 端口是在 4000-4100 范围内第一个可用的server socket。

5. 配置了两个监听器: ClusterSessionListener 和 JvmRouteSessionIDBinderListener

6. 配置了两个拦截器: TcpFailureDetector 和 MessageDispatch15Interceptor

很多人都说写技能类的文章没人看,不管若何,分享出来最少自己也可以看~