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池”有什么关系.这个词毫无意义.
希望这可以帮助.