【发布时间】:2013-11-14 12:41:21
【问题描述】:
我正在使用 below 来访问 App1 在 App2 中设置的会话数据。
在 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