Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将一些数据(HashMap)加载到Tomcat';s缓存?_Java_Tomcat - Fatal编程技术网

Java 如何将一些数据(HashMap)加载到Tomcat';s缓存?

Java 如何将一些数据(HashMap)加载到Tomcat';s缓存?,java,tomcat,Java,Tomcat,我正在开发一些JavaEE应用程序,它必须在HashMap中找到一些数据。问题是,我只想将这个HashMap加载到Tomcat一次——当Tomcat启动时,我不知道怎么做。你能给我一些提示吗 我想您应该在web应用程序启动之前加载HashMap 这就是你想要的。它将使您的代码在web应用程序启动之前运行。假设您只想为一个web应用程序加载此HashMap,则可以在容器加载应用程序的所有设置时(在读取web.xml文件后)加载。为此,您可以创建实现ServletContextListener的类

我正在开发一些JavaEE应用程序,它必须在HashMap中找到一些数据。问题是,我只想将这个HashMap加载到Tomcat一次——当Tomcat启动时,我不知道怎么做。你能给我一些提示吗

我想您应该在web应用程序启动之前加载
HashMap


这就是你想要的。它将使您的代码在web应用程序启动之前运行。

假设您只想为一个web应用程序加载此HashMap,则可以在容器加载应用程序的所有设置时(在读取
web.xml
文件后)加载。为此,您可以创建实现
ServletContextListener
的类

在其
contextInitialized
方法中,创建您感兴趣的HashMap,并将其作为属性添加到
ServletContext
。一个web应用程序只能有一个
ServletContext
实例,并且该实例可供所有Servlet/jsp使用,因此他们可以稍后使用您之前设置的映射获取该属性

例如:

class ContextListenerImpl implements ServletContextListener {

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        //can be empty for now
    }

    @Override
    public void contextInitialized(ServletContextEvent sce) {

        ServletContext sc = sce.getServletContext();

        //... here you can create and initialize your HashMap

        //when map is ready add it as attribute to servlet context 
        sc.setAttribute("mySpecialMap", map);
    }
}
您可以在servlet中获得此地图,如

protected void doGet(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {

    //...
    Map<Your,Types> map = (Map<Your,Types>) getServletContext()
                                .getAttribute("mySpecialMap");
    //...
}
protectedvoiddoget(HttpServletRequest),
HttpServletResponse响应)引发ServletException,IOException{
//...
Map Map=(Map)getServletContext()
.getAttribute(“mySpecialMap”);
//...
}
哦,还有一件重要的事:别忘了将这个侦听器添加到您的web应用程序中。因此,您必须添加

<listener>
    <listener-class>full.name.of.ContextListenerImpl</listener-class>
</listener>

full.name.of.ContextListenerImpl

到您的
web.xml
文件。

您确定要在tomcat启动时加载数据,还是在它加载web应用程序时加载数据(对于少数web应用程序,它会加载一些数据几次-每个应用程序一次)?我真正想要的是在我的web应用程序启动之前加载HashMap。所以这个HashMap应该只被一个web应用程序使用?没错。我想加载它一次,然后在HashMap中多次搜索一些数据。