在泽西岛 Webapp 启动时初始化数据库

我已经读过这个,但我不太明白它是如何工作的。我想加载属性文件并在 Web 应用程序启动时设置连接池。显然,我只想在一个地方这样做一次,这样我就可以在需要时进行更改。对于常规的 servlet,我会简单地将初始化代码放在 servlet 的 init() 方法中,但你不能使用 Jersey servlet 访问它。那么我该在哪里做呢?上面链接中的侦听器如何工作?


答案 1

你需要做的就是编写一个实现 ServletContextListener 接口的 java 类。此类必须实现两个方法 context 初始化方法,该方法在首次创建 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
}

网络.xml配置

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

现在,这将允许应用程序在部署应用程序时调用 ServletContextClass,并在上下文初始化方法中实例化连接或任何其他资源位置,这与 Servlet init 方法的作用类似。


答案 2

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