Tomcat 6 下的 Servlets 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 池”有何关系。这个词没有意义。
希望这对您有所帮助。
关于Java Servlet 池化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1755701/