同一个Tomcat下不同项目之间的session共享
Posted 异或随心
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了同一个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"));
以上是关于同一个Tomcat下不同项目之间的session共享的主要内容,如果未能解决你的问题,请参考以下文章