如何获取已在Javaservlet上下文中设置的全局对象

如何获取已在Javaservlet上下文中设置的全局对象,java,web-services,tomcat,servlets,Java,Web Services,Tomcat,Servlets,我正在开发一个Tomcat应用程序,它在启动时填充一个HashMap。我使用ServletContext.setAttribute在ServletContext中设置它。然而,我在这个应用程序中也有一些非JavaEE类(基本上我的webservice调用调用这些方法)。我想用这些方法访问这个HashMap。最好的方法是什么 在web服务类中获取HashMap,并将与方法参数相同的参数传递给非Java EE类。您的web服务应该可以访问HTTP请求和响应,从中可以获取ServletContext。

我正在开发一个Tomcat应用程序,它在启动时填充一个HashMap。我使用ServletContext.setAttribute在ServletContext中设置它。然而,我在这个应用程序中也有一些非JavaEE类(基本上我的webservice调用调用这些方法)。我想用这些方法访问这个HashMap。最好的方法是什么

在web服务类中获取HashMap,并将与方法参数相同的参数传递给非Java EE类。

您的web服务应该可以访问HTTP请求和响应,从中可以获取ServletContext。当web服务调用这些非J2EE方法时,您可以将映射作为参数传递。

您可以使映射对应用程序的所有类都可用:

  • 使用单例

  • 使用Tomcat全局JNDI树(不推荐,但您可以这样做)

    看到和


    • 谢谢大家的建议。然而,我试图实现的目标是通过以下示例实现的:


      它为我提供了一种在非Tomcat处理的类中检索上下文的方法。

      要么给他们发送hashMap,让他们做任何你想做的事情,要么更好:公开一个处理该映射的服务。有没有一种方法可以不用在上下文中设置它就可以做到?有没有一种方法可以在Tomcat应用程序的整个生命周期中保持对象的句柄?是的,这就是我说的:创建一个处理该映射的服务(可以是单例)。您可以从任何地方访问该服务,该服务将“隐藏”hashmap,并仅公开其功能。有没有一种方法可以在不在上下文中设置它的情况下执行此操作?有没有办法在Tomcat应用程序的整个生命周期中保留对象的句柄?ServletContext用于保存您希望在不同应用程序之间使用的内容。ServletConfig用于存储您只想在特定应用程序中访问的内容。是否有不想使用ServletContext的原因?我想使用ServletContext,但无法检索ServletContext,因为它是非Tomcat类。但是现在我正在使用ServletContextAware来检索它。我希望可以,但代码由spring管理,由CXF生成,不想干扰这一点。您可以在web xml文件中添加ServletContextListener。在这个侦听器中,您可以将项目加载到静态HashMap中,稍后您的POJO将可以访问这些项目。我最终做了一些与您所说的非常类似的事情。我想到了singleton,但希望有一种更有效的方法。