在servlet和Web服务之间共享静态对象的java
我有一个servlet,它处理HTTPGET请求,我希望能够共享一个对象,这个对象也被我开发的Web服务使用。它们都位于同一web应用程序容器中的同一个tomcat服务器上。我不知道怎么做最好有什么想法吗
你可以在下面搜索框中键入要查询的问题!
我有一个servlet,它处理HTTPGET请求,我希望能够共享一个对象,这个对象也被我开发的Web服务使用。它们都位于同一web应用程序容器中的同一个tomcat服务器上。我不知道怎么做最好有什么想法吗
# 1 楼答案
如果这是特定于应用程序的数据(可由所有用户(会话)访问),则使用
ServletContext#set/getAttribute()
。如果这是特定于用户(会话)的数据,则使用HttpSession#set/getAttribute()
让servlet类通过特定的属性键将对象设置在所需的作用域(应用程序或会话)中,并让webservice通过相同的属性键从所需的作用域获取对象
我想你更需要
HttpSession
单身汉的故事在这里毫无意义
# 2 楼答案
我将进一步阐述我的评论
在最简单的情况下
ServletContext.setAttribute/getAttribute
就可以了。但是一些人正确地提出了关于线程安全的问题为此,更好的方法是在webapp初始化期间将共享POJO存储在
ServletContext
中,并使用ServletContext.getAttribute
在需要的任何地方获取它为此,您需要实现ServletContextListener接口并在web中声明它。xml文件
当servlet容器加载webapp时,以及当servlet容器即将卸载webapp时,会调用此侦听器一次。在这两种情况下,它都会传递
ServletContextEvent
,该ServletContext
有一个句柄。正是在这一点上,您想要设置/删除指向共享对象的属性因此,您可以确定ServletContext。当从
Servlet.service
或其中一个do...
方法调用getAttribute时,它将返回一个有效的对象至于属性名,我将使用您的共享类类名。我还将向共享类添加一个静态访问方法,以便从
ServletContext
获取它,如下所示:# 3 楼答案
如果我对这个问题的另一种理解是正确的,那么来自请求的数据应该被存储,然后由web服务检索。如果这应该在多用户环境中运行,您可以考虑使用内存数据库(HSQLDB)临时存储数据。然后,基于一些我无法预测的标准,您将能够使用web服务检索它
# 4 楼答案
通过将内容作为属性存储在ServletContext(使用
setAttribute
/getAttribute
)中,您可以在webapp中共享内容。您可以在ServletContextListener的实现中创建对象,将其存储在ServletContext
中,然后从web服务和servlet中检索并使用它# 5 楼答案
最简单的选项是创建一个Singleton类,该类在内存中只允许一个实例。因为您是通过调用类本身的静态方法来获得它的,所以它应该对servlet和WS都可用