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