猿问

有什么方法可以在tomcat中的不同应用程序之间共享会话状态?

我们希望将一个正在运行的应用程序拆分为两个不同的.war文件,以便能够更新一个应用程序而不影响另一个应用程序。每个Web应用程序将具有不同的UI,不同的用户和不同的部署时间表。

最简单的路径似乎是共享同一会话,因此如果应用A设置了session.setAttribute("foo", "bar")应用B,则可以看到它。

有没有办法HttpSession在同一个Tomcat实例中共享两个应用程序的状态?

我们的应用程序在专用的Tomcat 5.5上运行,没有其他应用程序在同一tomcat实例上运行,因此,有关会话共享的任何安全问题都不会成为问题。我们正在运行多个Tomcat实例,但是平衡器正在使用粘性会话。

如果不可能,或者此会话共享不是一个好主意,请发表评论。


千万里不及你
浏览 387回答 3
3回答

月关宝盒

您不应该共享HttpSession;但您可以共享其他对象。例如,您可以通过JNDI注册对象,并在所有应用程序中访问同一对象(数据库使用此对象来池化连接)。

不负相思意

要注意的一件事是,两个Web应用程序将使用不同的类加载器。如果要共享对象,则它们需要使用来自相同类加载器的相同版本的类(否则,您将获得LinkageErrors)。这意味着要么将它们放入两个Web应用程序共享的类加载器中(例如,系统类路径),要么使用序列化有效地消耗并使用正确版本的类在正确的类加载器中重构对象。

largeQ

如果to webapp是如此紧密地耦合在一起,以至于它们需要共享对象,那么为什么要将它分成两部分?即使您稍微独立地管理它们,任何体面的构建管理系统都应该能够创建一个用于部署的WAR文件。像Aaron这样的解决方案建议使用JNDI起作用,但前提是两个Web应用程序都在同一服务器上运行。如果这些单元紧密耦合,并且无论如何您将在同一台服务器上运行它,那么可能还需要一个WAR如果您确实希望他们独立站立,那么我将认真检查两者之间的数据交换。理想情况下,您希望他们仅彼此共享相关数据。可以通过POST(或者更合适的话是GET)参数来回传递这些数据,您甚至可以考虑使用cookie。
随时随地看视频慕课网APP

相关分类

Java
我要回答