Java Servlet池
问题内容:
Tomcat 6下的Servlet 101:
有人可以帮我指出最好的方法,例如。在Servlet启动时创建昂贵的Foo对象的集合,并将它们存放在我在处理每个请求时可以访问它们的地方?
据我所知,至少有至少三种方法可以做到这一点,但我对此有所模糊。我不关心群集或算法来驱逐过时的条目或类似的东西,而仅是基础知识。
干杯和谢谢。
问题答案:
实现一个ServletContextListener
,在期间执行所需的加载任务contextInitialized()
并将结果存储在应用范围内ServletContext#setAttribute()
。将在服务器启动期间调用它,并且可以在常规servlet中访问应用程序范围。
基本示例:
public class Config implements ServletContextListener {
public void contextInitialized(ServletContextEvent event) {
List<Foo> foos = fooDAO().list();
event.getServletContext().setAttribute("foos", foos);
}
}
web.xml以通常的方式映射它:
<listener>
<listener-class>mypackage.Config</listener-class>
</listener>
以下是在常规servlet中访问它的方法:
protected void doSomething(request, response) {
List<Foo> foos = (List<Foo>) getServletContext().getAttribute("foos");
}
这是在JSP中访问它的方法:
<c:forEach items="${foos}" var="foo">
${foo.someProperty}<br>
</c:forEach>
也就是说,我真的看不到它与“ servlet池”有什么关系。这个术语没有任何意义。
希望这可以帮助。