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

Sot*_*lis 12 java web-applications initialization jersey

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

Mar*_*nis 39

您需要做的就是编写一个实现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
}
Run Code Online (Sandbox Code Playgroud)

web.xml配置

<listener>
    <listener-class>com.nameofpackage.ServletContextClass</listener-class>
</listener>
Run Code Online (Sandbox Code Playgroud)

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