N个tomcat之间实现Session共享

N个tomcat之间实现Session共享关于 tomcat 之间 session 共享的配置和解决方案



前言



转载请标明出处:http://blog.csdn.net/wlwlwlwl015/article/details/

对于高访问量、高并发量的网站或web应用来说,目前最常见的解决方案应该就是利用负载均衡进行server集群,例如比较流行的nginx+memcache+tomcat。集群之后比如我们有N个Tomcat,用户在访问我们的网站时有可能第一次请求分发到tomcat1下,而第二次请求又分发到了tomcat2下,有过web开发经验的朋友都知道这时session不一致会导致怎样的后果,所以我们需要解决一下多个tomcat之间session共享的问题。



环境准备



首先我们需要下载tomcat,这里我们选择tomcat7的解压缩版:

N个tomcat之间实现Session共享


下载完成后我们新建一个目录叫tomcat_cluster(tomcat集群的意思),直接解压下载好的tomcat,并重命名为tomcat1,可以看到目录结构如下:

N个tomcat之间实现Session共享

准备一个最简单的web项目(在IDE中创建部署,拷贝出来即可),并修改index.jsp的内容如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %>  My JSP 'index.jsp' starting page 
    
     
      
       
        
         SessionID:<%=session.getId()%> 
        
SessionIP:<%=request.getServerName()%>
SessionPort:<%=request.getServerPort()%> <% out.println("This is Tomcat Server 11111"); %>





这样基本工作就做完了,下面需要修改tomcat的配置文件,我们打开conf下的server.xml文件,找到下面这一行:

 
   

不需要做任何修改,在这一行的下面加入如下代码:

 
    
     
     
      
      
      
       
      
      
      
     
     
     
     
     
     
    


这个就是tomcat自带的集群配置了,我们可以在tomcat官方文档中的cluster-howto.html中看到相关注意事项,其中有一条需要注意一下:

Make sure your web.xml has the 
 element

很明显是说我们的web项目的web.xml文件中需要有
这个元素,所以在我们刚才引入的web项目中做如上的修改。

这样我们的基本配置就完成了,因为是集群,所以在tomcat_cluster目录下拷贝一份tomcat1,并重命名成tomcat2。

N个tomcat之间实现Session共享



注意一下需要修改的地方:

1、首先肯定是端口号,所有port字样的配置都修改一下保证两个不重复,我这里将tomcat1的端口修改为7080,tomcat2的端口修改为9080

2、修改webapps下的项目中的index.jsp文件,因为要测试session共享所以有必要区分一下,在jsp中加入一行静态文本即可,我这里是用“This is Tomcat Server ”和“This is Tomcat Server 22222”来进行区分的,下面分别启动两个tomcat进行测试,我们分别运行bin目录下的startup.bat,发现第一个tomcat启动之后,第二个无法启动,这是因为启动脚本(startup.bat)没有修改,引用同样的CATALINA_HOME必然会报错,所以请注意下面的第三点。

3、为我们的这两个tomcat添加两个环境变量——CATALINA_HOME2、CATALINA_HOME3分别指向这两个tomcat的安装目录:

N个tomcat之间实现Session共享


然后分别修改两个tomcat中bin目录下的两个脚本:startup.bat和catalina.bat,把tomcat1中的这两个文件中的%CATALINA_HOME%替换为%CATALINA_HOME2%,把tomcat2中的这两个文件中的%CATALINA_HOME%替换为%CATALINA_HOME3%,现在再启动tomcat,会发现两个tomcat都可以正常启动了,解压版的tomcat需要这样配置一下。在浏览器中检测一下tomcat是否可以成功访问:

N个tomcat之间实现Session共享



OK,再访问一下我们的测试项目,看看session是否一致:

N个tomcat之间实现Session共享


可以发现我们两个tomcat下的这两个项目Session完全一致,刷新也不会变,到此为止我们就算成功实现了Session共享,也就是说我们tomcat已经成功完成了任务,剩余的交给nginx就OK了。最后再强调一下,这两个testdemo的web.xml中需要加这么元素:

N个tomcat之间实现Session共享




总结



本篇blog介绍了tomcat集群之前的必备工作——session共享的配置,以及同时启动两个tomcat解压缩版需要注意的问题,希望对看到的同学有所帮助吧,The End。




版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/213753.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午5:43
下一篇 2026年3月18日 下午5:44


相关推荐

  • nginx指令详解_考试说明全解

    nginx指令详解_考试说明全解常见的命令有:nginx-sreopen#重启Nginxnginx-sreload#重新加载Nginx配置文件,然后以优雅的方式重启Nginxnginx-sstop#强制停止Nginx服务nginx-squit#优雅地停止Nginx服务(即处理完所有请求后再停止服务)nginx-t#检测配置文件是否有语法错误,然后退出nginx-?,-h#打开帮助信息nginx-v#显示版本信息并退出nginx-V#显示版本和配置选项信息,然后退出

    2025年5月25日
    4
  • JRE配置完整 tomcat闪退问题

    JRE配置完整 tomcat闪退问题如果你的JRE环境配置没有问题的话很有可能是你的Tomcat版本和jdk版本不相容导致的闪退 以我的电脑为例,我安装的是:当我解压安装Tomcat70.73的时候就出现了闪退的问题而当我下载最新的Tomcat9.0.13后就直接可以了至于闪退而不知道具体的问题的时候可以修改start.bat文件中的最后一行:“call"%EXECUTABLE%"start%CMD…

    2022年5月30日
    39
  • Java运算符优先级介绍!

    Java运算符优先级介绍!运算符丰富是 Java 语言的主要特点之一 它提供的运算符数量之多 在高级语言中是少见的 那么当多个运算符出现在一个表达式中 谁先谁后呢 这就涉及到运算符的优先级别的问题 在一个多运算符的表达式中 运算符优先级不同会导致最后得出的结果差别甚大 这套视频讲的都是 Java 基础 简单易懂 大家可以参考下 PS 运算符优先级在第 48 节 Java300 集零基础适合初学者视频下表中具有最高优先级的运算符在最上面 最低优先级的在最下

    2026年3月17日
    4
  • 抽象类和接口的关联

    抽象类和接口的关联

    2021年9月29日
    47
  • Java学习之Spring Boot入门

    Java学习之SpringBoot入门0x00前言学习完ssm的整合后,开始来学习SpringBoot,在前面学习Spring的时候会发现使用Spring开发中配置Spring的环境会非常的

    2021年12月12日
    58
  • 全网都在找便宜稳定的Nano Banana Pro API ——0.09/张!附保姆级接入实战!

    全网都在找便宜稳定的Nano Banana Pro API ——0.09/张!附保姆级接入实战!

    2026年3月15日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号