根据下面的 SO 帖子,我正在尝试在两个应用程序上下文之间共享会话(在同一个 Tomcat 实例上)。
我创建了两个如下所示的 webapp 来测试它。(每个 webapp 只包含一个 servlet 和一个 web.xml)
WebApp-1 小服务程序
public class App1Servlet extends HttpServlet
{
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response){
HttpSession session = request.getSession(true);
session.setAttribute("message", "hello");
try{
response.getOutputStream().print("session value set");
}catch(Exception e){}
}
}
Webapp-1 web.xml
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 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>app1</display-name>
<servlet>
<servlet-name>app1servlet</servlet-name>
<servlet-class>session.test.App1Servlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>app1servlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<session-config>
<cookie-config>
<name>APPSESSIONID</name>
<path>/</path>
</cookie-config>
</session-config>
</web-app>
WebApp-2 小服务程序
public class App2Servlet extends HttpServlet
{
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response){
HttpSession session = request.getSession(false);
try{
if(session != null){
response.getOutputStream().print(""+session.getAttribute("message"));
} else {
response.getOutputStream().print("session is null");
}
}catch(Exception e){}
}
}
Webapp-2 web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 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>app2</display-name>
<servlet>
<servlet-name>app2servlet</servlet-name>
<servlet-class>session.test.App2Servlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>app2servlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<session-config>
<cookie-config>
<name>APPSESSIONID</name>
<path>/</path>
</cookie-config>
</session-config>
</web-app>
现在,如果我一个接一个地触发以下http请求,第二个请求需要打印“hello”,但第二个请求总是打印“session is null”
http://localhost/app1
http://localhost/app2
有人可以指出这里有什么问题吗?(我的 web.xml 是 3.0 版)
我正在开发一种社交网络类型的 webapp。我计划将 UI 部分创建为一个 webapp,将后端创建为一个 RESTful 服务 webapp,并计划将两个 webapps 部署到同一个 tomcat 实例。有人可以建议这是一种正确的方法吗?