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