正确的方法来清理servlet

时间:2012-04-03 09:39:44

标签: java java-ee web-applications servlets

我需要在我的Web应用程序中释放一些资源(Tomcat 7) 我尝试在destroy的{​​{1}}中进行此操作 问题是,当我在servletgetServletContext()时,没有任何事情发生 通过调试我设法看到:

  

显示java.lang.NullPointerException           在javax.servlet.GenericServlet.getServletContext(GenericServlet.java:125)

来自我destroy getSerlvetContext()方法中的destroy行。

所以现在,我不知道我应该如何在我的网络应用程序中进行清理 我已经在servlet中存储了一些资源,因此可以在我的应用程序的任何地方使用它,据我所知 资源清理应该完成

1)在ServletContextdestroy中 2)servlets

contextDestroyed

但这些似乎都不合适。如果(1)我在尝试访问servlet上下文时得到ServletContextListener 在情况(2)中,Web应用程序已经关闭,因此如果我有静态方法负责执行例如由于Web应用程序已经关闭,因此JVM已经卸载了DB连接的重新分配等类(因为我已经理解了这个问题)。

我做错了吗?我该怎么办?

2 个答案:

答案 0 :(得分:3)

要获取ServletContext,通常的方法是将其存储在实例变量中。根据您是扩展Servlet还是实现ServletContextListener,我建议为上下文创建一个实例变量,然后将其存储在以下方法之一中:

  • ServletContextListener.contextInitialized(ServletContextEvent sce):使用sce.getServletContext()获取上下文的引用,然后可以将其存储在实例变量中。
  • HttpServlet.init(ServletConfig config):使用init参数调用超级方法(config),以便稍后使用getServletContext()访问它。如果这不起作用,您可以使用config.getServletContext()将上下文存储在实例变量中。

答案 1 :(得分:-5)

带着希望。真的你不用担心TOMCAT / J2EE应用程序进程的清理过程。如果你有兴趣这样做,那么只需删除/清除Catalina临时目录。删除/清除所有工作数据并使你的应用程序成为新的非常简单。实际上,当您运行Web应用程序时,tomcat会在安装文件夹中创建一个临时工作目录。所以,请按照以下步骤操作: -

步骤: -

  1. 停止你的tomcat
  2. 转到您的tomcat目录(C:\ Program Files \ Apache Software Foundation \ Tomcat 5.5)
  3. 找到工作文件夹&删除(shift delete)
  4. 现在再次启动tomcat&享受新的应用程序。

    使用TOMCAT快乐编程。其他人也可以关注我的博客。

    由于