我使用 Tomcat 作为应用程序服务器,并在其上运行 4 个 Web 应用程序。由于 Web 应用程序的一些常见需求,我开发了一个库,将其放在 Tomcat 的 lib
文件夹中,以便将实现共享给 Web 应用程序。但是,我想在库上实现一些资源管理功能,例如为每个 Web 应用程序创建和管理单例资源(即,一个 Web 应用程序获取一个单例资源)。我想做的是管理一个 ConcurrentHashMap 并将每个单例资源存储在其中。但是,当 Web 应用程序调用库来访问其资源时,我需要获取调用者所属的 Web 应用程序的名称,以便我可以将正确的资源返回给调用者。有没有一个好的方法来实现这样的事情(应用程序在调用库获取资源时不需要传递参数或标识的方法是首选)?或者这样的思考方式只是错误的,还有更好的解决方案吗?
非常感谢!
最佳答案
恕我直言,您所描述的不是 java 单例 模式,因为您希望每个 Web 应用程序有一个对象。事实上,我认为您需要每个 ServletContext
这些对象之一。我无法理解为什么您不想使用 Servlet 功能,因为正确的方法是在每个 Web 应用程序中使用 ServletContextListener(可以是同一个类)来创建单例资源(也可以是公共(public)类)并将它们作为属性放入 ServletContext(每个 Web 应用程序只有一个)。
ServletContext 属性可以轻松地从任何 servlet(request.getSession().getServletContext().getAttribute("attribute_name")
或 jsp(<jsp:useBean id="attribute_name" scope="application" type="..."/>
然后 ${attribute_name}
)使用
关于java - 有没有一种方法可以在不使用 Servlet 功能的情况下获取 Web 应用程序的名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26134086/