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