Java Servlet 池化

标签 java servlets pooling

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/

相关文章:

java - dom4j XPath 无法解析 xhtml 文档

java - 单击内部区域后删除形状

java - 如何在 Swing 应用程序中创建 HttpServletRequest 实例

c++ - 用C++设计一个有助于减少 "repetitive operations on objects"的小对象池

java - 这种不同步的对象池实现是否良好/安全?

java - 如何将非并行流与并行流(一个生产者多个消费者)互连

java - 我的微调器和 ListView 中出现重复数据

java - JSF Servlet 导致奇怪的行为

java - tea servlet框架有什么用?

java - 插入Java连接池层?