在Jersey webapp启动时初始化数据库

我读过这个,但我不太明白它是如何工作的。 我想在我的Web应用程序启动时加载属性文件并设置我的连接池。 显然我只想在一个地方做一次,所以如果需要我可以改变它。 使用常规servlet,我只需将初始化代码放在servlet的init()方法中,但是您无法使用Jersey servlet访问它。 那我该怎么办? 上面链接中的听众如何工作?

您需要做的就是编写一个实现ServletContextListener接口的java类。 此类必须实现两个方法contextInitialized方法,该方法在首次创建Web应用程序时调用,而contextDestroyed将在销毁时调用。 您要初始化的资源将在contextInitialized方法中实例化,并且资源将在contextDestroyed类中释放。 必须将应用程序配置为在部署时调用此类,该类在web.xml描述符文件中完成。

public class ServletContextClass implements ServletContextListener { public static Connection con; public void contextInitialized(ServletContextEvent arg0) { con.getInstance (); }//end contextInitialized method public void contextDestroyed(ServletContextEvent arg0) { con.close (); }//end constextDestroyed method } 

web.xml配置

  com.nameofpackage.ServletContextClass  

现在,这将使应用程序在部署应用程序时调用ServletContextClass,并在contextInitialized方法中实例化Connection或任何其他资源位置,这与Servlet init方法的作用类似。

由于您不需要在启动时修改Jersey本身,因此您可能不需要AbstractResourceModelListener。 你想要的是一个javax.servlet.ServletContextListener 。 您可以像添加servlet元素一样将侦听器元素添加到web.xml中。 首次创建上下文(Web应用程序)时以及在启动Jersey servlet之前,将调用ServletContextListener。 您可以在此侦听器中执行数据库所需的任何操作,并在开始使用Jersey时准备就绪。