【问题标题】:Sharing application scope data data between web applications?在 Web 应用程序之间共享应用程序范围数据数据?
【发布时间】:2013-11-14 12:41:21
【问题描述】:

我正在使用 below 来访问 App1App2 中设置的会话数据。

在 App1 中:

ServletContext sctx = ((HttpServletRequest) request).getSession().getServletContext();
    String testStr = (String) sctx.getAttribute("attr");
    if(testStr == null){
        testStr = "test";
        sctx.setAttribute("attr", testStr);
    }

在 App2 中

我得到如下会话值。

ServletContext sctx = ((HttpServletRequest) request).getSession().getServletContext().getContext("/app1");
    String testStr = (String) sctx.getAttribute("attr");
    System.out.println("the value which set in first app: " + testStr);

其实是我的App2 will be in cluster environment。在这种情况下,App1 是否也应该在集群环境中? 我的 App2 是一个 Web 应用程序,它暴露的 Web 服务很少,并且不包含任何 UI。 App1 和 App2 之间不得有任何直接通信。 App1 必须在其启动时在应用程序范围内设置一些值,稍后 App2 应在需要时访问应用程序范围内的值。谢谢

集群环境有什么问题吗?我的方法正确吗?

谢谢!

【问题讨论】:

  • @Markus,该链接不适合我的需要..谢谢!
  • 标题具有误导性。 ServletContext 不是会话;此数据是应用程序范围的。
  • 是的。你是对的。在这种情况下,App1 和 App2 都应该在同一个 App 服务器上吧?
  • 如果您想共享 servlet 上下文属性,那么,是的,两个应用程序都必须在集群中的每个节点上运行。如果您想跨集群复制该数据,我没有任何建议,因为我从未以这种方式使用过 Tomcat。
  • 非常感谢您的回复...如果有任何节点更改应用程序范围变量值,那么它会反映在所有节点中吗?谢谢

标签: java spring tomcat servlets java-ee-6


【解决方案1】:

如果:

  1. 两个应用程序都在集群环境中
  2. 会话属性中的所有内容都是可序列化的
  3. 您的会话正在持久化集群共享的一些数据存储区

那么您的会话属性应该在所有服务器上都可用。

【讨论】:

  • Lane,感谢您的回复。如果我不在集群环境中保留 App1,那么它不会正常工作吗? App1 和 App2 也应该在同一个应用程序服务器中,对吗?谢谢
  • 这取决于 servlet 容器。我知道 JBoss 将允许在 Web 部署之间共享会话,但为了避免实现依赖,我建议使用一个应用程序。或者,您可以将此信息存储在 cookie 中。
  • 感谢您的回复。我不能使用 cookie 机制,因为我不处理浏览器并且它不包含 UI。但它是一个网络应用程序。这里 App2 几乎没有暴露的 Web 服务。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-14
  • 1970-01-01
  • 2014-11-03
  • 2013-04-02
  • 2014-06-04
  • 1970-01-01
相关资源
最近更新 更多