【问题标题】:sharing servlet context across web applications in same server在同一服务器中的 Web 应用程序之间共享 servlet 上下文
【发布时间】:2011-12-15 01:31:15
【问题描述】:

我在同一个容器 (Tomcat) 中运行的单独 Web 应用程序中有两个 servlet。让应用程序是 app1 和 app2,而 servlet 是 serv1 和 serv2。

我正在使用 serv1(在 app1 中)调用 serv2(在 app2 中)。我还尝试在这两个 servlet 之间共享同一个会话。下面是我的代码片段。

serv1 (app1)

URLConnection connection = new URL("http://localhost:8080/app2/serv2").openConnection();
BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream()));  
HttpSession session = request.getSession(true);  
String sessionId = session.getId();  
ServletContext myContext = getServletContext();
myContext.setAttribute("MYSHAREDSESSIONID", sessionId);
myContext.setAttribute("SHAREDSESSION", session);

serv2(app2)

ServletContext callingContext = getServletContext().getContext("/app1");  
String jsessionId = (String)callingContext .getAttribute("MYSHAREDSESSIONID");

server.xml

<Host>
 <Context path="/app1" crossContext="true" />
 <Context path="/app2" crossContext="true" />
</Host>

问题是我在 serv2 getAttribute() 中得到空指针异常。根本原因是,getContext("/app1") 正在返回 null。上下文名称是正确的。我不知道为什么我无法检索 servlet 上下文。我不想使用 cookie 或 url 重写。请帮忙。

【问题讨论】:

  • 那个&lt;Host&gt; 不应该进入web.xml。既然这会导致 XML 解析错误,我敢打赌你只是打错了“web.xml”?还是您真的web.xml 文件中有它,IDE 和/或 servletcontainer 的 XML 解析器是否过于宽容?
  • 对不起。它不是 web.xml。它的 server.xml

标签: java tomcat servlets


【解决方案1】:

目前看起来还不错。显然它已被在其他地方维护/生成的context.xml 覆盖。你可以在 Tomcat 的Context configuration reference 中阅读有关规则的信息。例如,您在 webapp 的/META-INF 中有一个吗?然后你应该在那里定义crossContext

或者你是在使用像 Eclipse 这样的 IDE 来部署 webapps 吗?然后必须将 IDE 配置为不部署到工作区元数据中,而是直接部署到 Tomcat 中,否则 Eclipse 将使用它自己的 context.xml 副本(您可以在 Servers 项目中找到它)。您可以在服务器的首选项中配置它。这是来自 Eclipse 的屏幕:

【讨论】:

  • 非常感谢。我将 IDE 配置为不部署到工作区元数据中。我让它直接部署到tomcat本身。它起作用了....J
【解决方案2】:

根据 J2EE,每个上下文都有自己的会话管理。您不能跨两个不同的 servlet 上下文共享会话。您需要在上下文之间来回传递 jessionid。

【讨论】:

  • 那你是说设置crossContext=true 行不通吗?请指导我来回传递 jsessionid。
  • crossContext=true 会起作用,但应谨慎使用。这是不安全的。您还将更改应用程序的类加载器的工作方式。您应该确保您了解 tomcats 类加载器策略。
猜你喜欢
  • 2017-08-17
  • 2012-12-20
  • 1970-01-01
  • 2020-06-11
  • 1970-01-01
  • 1970-01-01
  • 2013-04-16
  • 2012-07-29
  • 1970-01-01
相关资源
最近更新 更多