ServletContextListener接口中的contextDestroyed步骤没有执行!

_frank 2013-03-16 11:54:38
ServletContextListener接口中的contextDestroyed步骤没有执行!

web.xml配置
<listener>
<listener-class>com.test.ContextManager</listener-class>
</listener>

ContextManager.java

package com.test;

import java.io.IOException;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

/**
* Application Lifecycle Listener implementation class ContextManager
*
*/
public class ContextManager implements ServletContextListener {

/**
* Default constructor.
*/
public ContextManager() {
System.out.println("ContextManager");
}

/**
* @see ServletContextListener#contextInitialized(ServletContextEvent)
*/
public void contextInitialized(ServletContextEvent arg0) {
System.out.println("contextInitialized");
}

/**
* @see ServletContextListener#contextDestroyed(ServletContextEvent)
*/
public void contextDestroyed(ServletContextEvent sc) {

//System.out.println("contextDestroyed:"+sc.getServletContext().getContextPath());
try {
Runtime.getRuntime().exec("cmd");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}

我是直接关闭tomcat进程或stop the servers两个操作,都没有执行contextDestroyed,不是当容器终止Web应用时因该调用contextDestroyed方法,但是没有调用,这是为什么,还请大家指点,以上只是个测试代码,最终的业务绝对不是上面这些,我就是想,为什么contextDestroyed方法没有执行
...全文
1557 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
百里马 2015-02-03
  • 打赏
  • 举报
回复
需要正常关闭tomcat才会走这样的流程。 若是直接kill进程,那么tomcat根本无法正常的进行扫尾工作~ 在MyEclipse需要用”stop server“按钮而不是Terminate
村野樵夫 2015-02-02
  • 打赏
  • 举报
回复
这个问题解决了吗?现在我也遇到类似问题,单独在contextdestroyed方法中输出打印一句话!前提是我没有使用eclipse或者是myeclipse来开启和关闭jboss服务,只是在服务器控制台通过ctrl+c来关闭服务。控制台中一致没有语句的输出!!!
老李家的小二 2014-09-18
  • 打赏
  • 举报
回复
引用 6 楼 tiancai_kuaile 的回复:
我也遇到过这样的问题,其实当tomcat服务器关闭时contextDestroyed()方法确实走了,你认为它没走,我估计是你用了eclipse或者是myeclipse来开启和关闭tomcat了吧,这是控制台是不显示内容的,不要通不过这些软件来开启和关闭,而是你找到你安装tomcat的目录下,点击开启或关闭tomcat命令,这样你就看见其实走了contextDestroyed这个方法。
正解
致知Fighting 2014-05-28
  • 打赏
  • 举报
回复
直接干掉进程肯定不会掉,正常的stop才会调
tiancai_kuaile 2014-05-28
  • 打赏
  • 举报
回复
我也遇到过这样的问题,其实当tomcat服务器关闭时contextDestroyed()方法确实走了,你认为它没走,我估计是你用了eclipse或者是myeclipse来开启和关闭tomcat了吧,这是控制台是不显示内容的,不要通不过这些软件来开启和关闭,而是你找到你安装tomcat的目录下,点击开启或关闭tomcat命令,这样你就看见其实走了contextDestroyed这个方法。
  • 打赏
  • 举报
回复
这个肯定会执行的,,以前调试过,你加个断点不就什么都知道了 吗?
H15090899773 2014-01-03
  • 打赏
  • 举报
回复
在Eclipse是看不到效果的,你可以在关闭的时候写东西到一个文件里,那里能看到效果
super_whx 2013-09-26
  • 打赏
  • 举报
回复
亲,解决了吗,,我也很纠结
_frank 2013-03-17
  • 打赏
  • 举报
回复
执行cmd只是测试下,这个跟有没有执行contextDestroyed方法没什么关系吧
qq450999788 2013-03-16
  • 打赏
  • 举报
回复
你为什么不System.out.print(...)一下呢。 执行cmd命令干嘛

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧