1

我的应用程序中有很多下拉菜单。这些下拉菜单的内容是从数据库中读取的。

目前,为了避免每次我想使用它们时拉回这些值,我在第一次需要它们时将它们拉回一次,然后将它们存储在会话中。

情况不妙。我确实想将它们存储在会话中,因为它们有很多,而且我认为这有点笨拙。我想在理想情况下(假设您不同意)将这些“常量”(它们不是传统常量,但在部署期间不会改变)存储在应用程序范围内,因此它们只需要每次部署从数据库中拉回一次。

我想知道的是,在启动时将这些下拉值存储在应用程序上下文中的方法是什么?

4

1 回答 1

1

有一个接口,其名称ServletContextListener提供了一个连接到您的 servlet 上下文初始化的钩子。这ServletContext是您的应用程序的上下文,即。它的配置。

执行您所描述的一种方法是实现此接口并在类ServletContextListener中注册web.xml或通过使用@WebListener.

在该contextInitialized()方法中,您将提取常量,以您需要的任何方式设置它们,然后将它们放入ServletContextas 属性中

@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.

ServletorFilter中,您可以从ServletRequest

HttpServletRequest request = ....;
request.getServletContext();

如果您想在那里添加更多属性,您还可以从 的init()方法访问它。ServletFilter

于 2013-09-09T12:51:48.717 回答