3

我有一个简单的 web 应用程序,带有一些 jsp 页面、servlet 和 pojo。我想在发出任何请求之前初始化连接池。做这个的最好方式是什么?可以在首次部署应用程序时完成,还是必须等到第一个请求进来?

4

2 回答 2

9

使用 ServletContextListener 并在 web.xml 中正确声明它。这种方式比启动 servlet 更可取。它更有条理,你的意图很明显。它也保证在任何请求之前运行。它还为您提供了一个关闭挂钩来清除池。

这是我的 web.xml 中的一个片段,例如:

<listener>
  <listener-class>
    com...ApplicationListener
  </listener-class>
</listener>

这是类本身的代码片段。确保您捕获异常,以便它们不会传播到您的服务器应用程序,并提供有用的日志消息 - 这些将在您跟踪应用程序时为您提供帮助。

public class ApplicationListener implements ServletContextListener {

  private ServletContext sc = null;

  private Logger log = Logger
    .getLogger(ApplicationListener.class);

  public void contextInitialized(ServletContextEvent arg0) {
    this.sc = arg0.getServletContext();
    try {
      // initialization code
    } catch (Exception e) {
      log.error("oops", e);
    }
    log.info("webapp started");
  }

  public void contextDestroyed(ServletContextEvent arg0) {
    try {
      // shutdown code
    } catch (Exception e) {
      log.error("oops", e);
    }
    this.sc = null;
    log.info("webapp stopped");
  }

}

请参阅此处的 api和此处的示例。

于 2008-11-22T16:23:39.897 回答
0

用于初始化连接池的基本启动 servlet 怎么样?

于 2008-11-22T15:59:48.480 回答