gpt4 book ai didi

java - 上下文之间的 session 共享在 Tomcat 7 上不起作用

转载 作者:行者123 更新时间:2023-11-30 04:11:09 25 4
gpt4 key购买 nike

基于下面的SO帖子,我试图在两个应用程序上下文之间(在同一个Tomcat实例上)共享 session 。

Sharing session data between contexts in Tomcat

我创建了两个如下所示的网络应用程序来测试这一点。 (每个webapp只包含一个servlet和一个web.xml)

WebApp-1 Servlet

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 Servlet

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)

我正在开发一种社交网络类型的网络应用程序。我计划将 UI 部分创建为一个 Web 应用程序,将后端创建为一个静态服务 Web 应用程序,并计划将这两个 Web 应用程序部署到同一个 Tomcat 实例。有人能建议这是正确的方法吗?

最佳答案

尽管 session ID 可能取决于配置,但 Web 应用程序之间永远不会共享 session 。当共享 ID 时,会以正常方式在每个 Web 应用程序中创建 session ,但它们将共享一个公共(public) ID。

关于java - 上下文之间的 session 共享在 Tomcat 7 上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19571325/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com