Dea*_*ano 2 java servlets web-applications initialization
我有一个简单的Web应用程序,有几个jsp页面,servlet和pojo.我想在发出任何请求之前初始化连接池.做这个的最好方式是什么?可以在应用程序首次部署时完成,还是必须等到第一个请求进入?
使用ServletContextListener并在web.xml中正确声明它.这种方式比启动servlet更好.它更有条理,你的意图是显而易见的.它也保证在任何请求之前运行.它还为您提供了一个关闭钩子来清除池.
这是我的web.xml的一个片段,例如:
<listener>
<listener-class>
com...ApplicationListener
</listener-class>
</listener>
Run Code Online (Sandbox Code Playgroud)
这是类本身的代码片段.确保捕获异常,以便它们不会传播到您的服务器应用程序,并提供有用的日志消息 - 这些消息将在您跟踪应用程序时提供帮助.
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");
}
}
Run Code Online (Sandbox Code Playgroud)