我的应用程序中有很多下拉菜单。这些下拉菜单的内容是从数据库中读取的。
目前,为了避免每次我想使用它们时拉回这些值,我在第一次需要它们时将它们拉回一次,然后将它们存储在会话中。
情况不妙。我确实想将它们存储在会话中,因为它们有很多,而且我认为这有点笨拙。我想在理想情况下(假设您不同意)将这些“常量”(它们不是传统常量,但在部署期间不会改变)存储在应用程序范围内,因此它们只需要每次部署从数据库中拉回一次。
我想知道的是,在启动时将这些下拉值存储在应用程序上下文中的方法是什么?
我的应用程序中有很多下拉菜单。这些下拉菜单的内容是从数据库中读取的。
目前,为了避免每次我想使用它们时拉回这些值,我在第一次需要它们时将它们拉回一次,然后将它们存储在会话中。
情况不妙。我确实想将它们存储在会话中,因为它们有很多,而且我认为这有点笨拙。我想在理想情况下(假设您不同意)将这些“常量”(它们不是传统常量,但在部署期间不会改变)存储在应用程序范围内,因此它们只需要每次部署从数据库中拉回一次。
我想知道的是,在启动时将这些下拉值存储在应用程序上下文中的方法是什么?
有一个接口,其名称ServletContextListener
提供了一个连接到您的 servlet 上下文初始化的钩子。这ServletContext
是您的应用程序的上下文,即。它的配置。
执行您所描述的一种方法是实现此接口并在类ServletContextListener
中注册web.xml
或通过使用@WebListener
.
在该contextInitialized()
方法中,您将提取常量,以您需要的任何方式设置它们,然后将它们放入ServletContext
as 属性中
@WebListener
public static class MyListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
ServletContext context = sce.getServletContext();
int someConstant = 42;
context.setAttribute("myConstant", someConstant);
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
...
}
}
然后,您可以在任何可以访问ServletContext
.
在Servlet
orFilter
中,您可以从ServletRequest
HttpServletRequest request = ....;
request.getServletContext();
如果您想在那里添加更多属性,您还可以从 的init()
方法访问它。Servlet
Filter