我有一个简单的网络应用程序,有几个jsp页面,servlet和pojo。我想在发出任何请求之前初始化连接池。做这个的最好方式是什么?可以在首次部署应用程序时完成,还是必须等到第一个请求进入后才能完成?
答案 0 :(得分:8)
使用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");
}
}
答案 1 :(得分:0)
初始化连接池的基本启动servlet怎么样?