我的应用程序中有很多下拉菜单。从数据库中读取这些下拉菜单的内容。
目前,为了避免每次我想要使用它们时将这些值拉回来,我在第一次需要它时将它们拉回来并在之后将它们存储在会话中。
这不好。我确实希望将它们存储在会话中,因为它们有很多,我认为它有点,嗯,笨重。我想在理想情况下(假设你不反对),在应用程序范围内存储这些“常量”(它们不是传统常量,但它们在部署期间不会更改),因此它们只需要每次部署时从数据库中撤回一次。
我想知道的是,在启动时在应用程序上下文中存储这些下拉值的方法是什么?
答案 0 :(得分:1)
有一个名为ServletContextListener
的接口,它为servlet上下文的初始化提供了一个钩子。 ServletContext
是您的应用程序的上下文,即。它的配置。
执行此操作的一种方法是实现此接口并在ServletContextListener
中注册web.xml
或使用@WebListener
注释该类。
在contextInitialized()
方法中,您将拉出常量,以您需要的任何方式设置它们,然后将它们作为属性放入ServletContext
@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
或Filter
中,您可以从ServletRequest
HttpServletRequest request = ....;
request.getServletContext();
如果您想在那里添加更多属性,您还可以使用init()
和Servlet
的{{1}}方法访问它。