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

时间:2012-10-13 18:21:27

标签: java web-applications initialization jersey

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

2 个答案:

答案 0 :(得分: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
}

web.xml配置

<listener>
    <listener-class>com.nameofpackage.ServletContextClass</listener-class>
</listener>

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

答案 1 :(得分:3)

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