设置数据库在启动时拉出应用程序常量

时间:2013-09-06 14:20:26

标签: servlets constants servlet-listeners

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

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

这不好。我确实希望将它们存储在会话中,因为它们有很多,我认为它有点,嗯,笨重。我想在理想情况下(假设你不反对),在应用程序范围内存储这些“常量”(它们不是传统常量,但它们在部署期间不会更改),因此它们只需要每次部署时从数据库中撤回一次。

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

1 个答案:

答案 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的任何地方访问这些常量。

ServletFilter中,您可以从ServletRequest

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

如果您想在那里添加更多属性,您还可以使用init()Servlet的{​​{1}}方法访问它。