同一个Tomcat下不同项目之间的session共享

  最近发现项目运行过程中经常会抛出一个 NullPointerException的异常,经检查发现异常出现的地方是日志模板,一阵检查,正常无误

(把所有记录日志的地方都点了一遍,心里是崩溃的),万念俱灰下突然想起来还有一个项目的业务也连接到这个项目,抱着试试的心态去那里

执行了下方法,果然,异常出现了,项目A里获取不到项目B的session。无奈,根据资料做了个session共享,具体方法如下:

项目名称 A:testA,B:testB

1 : 修改Tomcat---conf----server.xml文件

把 <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true" xmlNamespaceAware="false" xmlValidation="false"></Host> 修改为:

 <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true" xmlNamespaceAware="false" xmlValidation="false">

      <Context path="/testA" reloadable="false" crossContext="true"></Context> 
      <Context path="/testB" reloadable="false" crossContext="true"></Context>

  </Host>

2:  在项目A中,写入以下代码:

   //以下内容用于测试同一tomcat下不同项目之间共享session 
      HttpSession session = req.getSession();

   session.setAttribute("test", "testA");

// session失效时间,单位毫秒

   session.setMaxInactiveInterval(6000);

   ServletContext contextA = req.getSession().getServletContext();

contextA.setAttribute("session", req.getSession());

3.在项目B中,使用以下代码取出 session

  HttpSession session = req .getSession();

ServletContext context = session.getServletContext();

  // 这里面传递的是项目a的虚拟路径

ServletContext context1= context.getContext("/testA");

System.out.println(context1);

HttpSession session2 = (HttpSession) context1.getAttribute("session");

System.out.println("项目A传过来的值 : "+session2.getAttribute("test"));

时间: 2024-12-14 23:31:52

同一个Tomcat下不同项目之间的session共享的相关文章

tomcat session共享: 同tomcat不同项目之间的session共享

有时我们会遇到一个大点的项目,为了方便实现有些功能,我们会把项目拆成不同的独立web项目. 但我们在管理这些项目时,只有一个登陆口,然后在其他项目取session来实现身份的验证. 查看tomcat 关于 HTTP Connector中有个emptySessionPath 其解释如下: If set to true, all paths for session cookies will be set to /. This can be useful for portlet specificati

同一个tomcat多个项目共享session,一个tomcat两个项目共享sessionId

同一个tomcat多个项目共享session,一个tomcat两个项目共享sessionId >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ?Copyright 蕃薯耀 2017年7月12日 http://www.cnblogs.com/fanshuyao/ 一个是2个项目,一个是web-sess

Tomcat下设置项目为默认项目

项目的实际使用中经常需要将当前项目设为tomcat的默认项目,而不是进入到tomcat的页面,有几种方法可以实现,注意第二种.第三种情况需要先删除webapps下的ROOT目录,否则会失败. 一.将自己的项目改名为ROOT注意项目名称要大写 如果改完后没生效,建议清空tomcat中的work目录(缓存) 二.修改配置文件server.xml 增加<Context path="" docBase="Cluster" debug="0" rel

跨服务器之间的session共享

跨服务器之间的Session共享方案需求变得迫切起来,最终催生了多种解决方案,下面列举4种较为可行的方案进行对比探讨: 1. 基于NFS的Session共享 NFS是Net FileSystem的简称,最早由Sun公司为解决Unix网络主机间的目录共享而研发. 这个方案实现最为简单,无需做过多的二次开发,仅需将共享目录服务器mount到各频道服务器的 本地session目录即可,缺点是NFS依托于复杂的安全机制和文件系统,因此并发效率不高,尤其对于session这类高并发读写的小文件, 会由于共

tomcat下部署项目的流程和遇到的问题笔记

简单部署流程: 1,解析域名关联到服务器ip 2,配置服务器jre运行环境 3,安装tomcat 4,项目打war包,放入tomcat根目录下webapps(tomcat默认加载的项目目录)目录下 5,启动运行 Tomcat增加Context配置导致启动的时候项目加载两次 转自:https://segmentfault.com/a/1190000002985203 Tomcat排雷笔记 1. 出现场景eclipse发布web应用至tomcat,默认方式下访问该项目是需要带项目名称的,例http:

tomcat 下发布项目

用MyEclipse导出WaR file 1.将WaR file 文件拷贝到tomcat 下的 webapps 文件下 启动tomcat tomcat 会自动解析出项目,打开浏览器输入地址即可 2.想进一步发布,可以将解析出的文件拷贝到webapps 文件下的root文件下 此时 wenbapps文件下的解析文件跟WaR file 都可以删掉了,打开浏览器在 地址栏只需输入loaclhost 就可以访问项目. ps:root文件下只能有WaR file 的解析文件.

基于nginx tomcat redis分布式web应用的session共享配置

一.前言 nginx 作为目前最流行的开源反向代理HTTP Server,用于实现资源缓存.web server负载均衡等功能,由于其轻量级.高性能.高可靠等特点在互联网项目中有着非常普遍的应用,相关概念网上有丰富的介绍.分布式web server集群部署后需要实现session共享,针对 tomcat 服务器的实现方案多种多样,比如 tomcat cluster session 广播.nginx IP hash策略.nginx sticky module等方案,本文主要介绍了使用 redis

Nginx+Tomcat+Memcache实现负载均衡及Session共享

第一部分 环境介绍 部署环境: Host1:Nginx.Memcached.Tomcat1 Host2:Tomcat2 Tomcat_version:8.0.38 第二部分 Nginx+Tomcat实现负载均衡 1.nginx及tomcat的安装省略 2.nginx负载均衡配置: http标签中定义tomcat集群: upstream tomcat_server { server 101.200.229.38:8080; server 101.200.162.214:8080; } server

Tomcat集群使用Memcached实现Session共享

Session是什么? 用户访问服务器资源主要分成两类,一类是无状态访问,例如请求一张图片.另一类是有状态访问,这种情况下,服务器需要记录追踪用户状态,并根据用户所处状态做出不同响应,典型的例子是购物车.Session的作用就是在Web服务器上保持用户的状态信息. Tomcat集群为什么需要Session共享? 当客户端访问Tomcat集群时,所有的请求将被Nginx拦截,由Nginx做负载均衡后转发给后台真实Tomcat.按照这个流程就可能出现一个问题,当用户进行页面刷新或跳转时,每次请求将被