Java 在Web服务器关闭时调用contextDestroyed方法
我创建了一个webapp,它只有一个servletContext列表器 代码如下: 我尝试了Java 在Web服务器关闭时调用contextDestroyed方法,java,unix,Java,Unix,我创建了一个webapp,它只有一个servletContext列表器 代码如下: 我尝试了Runtime.getRuntime(),但没有成功。因此,虽然谷歌搜索遇到了ProcessBuilder,但它也不起作用 我可以通过在UNix box上从控制台运行来执行脚本 下面代码的目的是在服务器停机时执行sh脚本,如捕获类似echo Hello>test.txt的内容。但当服务器停机时,该脚本不会执行。不确定为什么未调用conextdestromed,或者如果调用conextdestromed为什
Runtime.getRuntime()
,但没有成功。因此,虽然谷歌搜索遇到了ProcessBuilder
,但它也不起作用
我可以通过在UNix box上从控制台运行来执行脚本
下面代码的目的是在服务器停机时执行sh脚本,如捕获类似echo Hello>test.txt的内容。但当服务器停机时,该脚本不会执行。不确定为什么未调用conextdestromed
,或者如果调用conextdestromed
为什么未执行脚本
public class MyTestContextListener implements ServletContextListener{
@Override
public void contextDestroyed(ServletContextEvent arg0) {
// TODO Auto-generated method stub
ProcessBuilder pb = new ProcessBuilder("/bin/bash","/local/test/tomcatContextTest/tomcatContextListener.sh");
try {
pb.start();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void contextInitialized(ServletContextEvent arg0) {
// TODO Auto-generated method stub
ProcessBuilder pb = new ProcessBuilder("/bin/bash","/local/test/tomcatContextTest/tomcatStartContextListener.sh");
try {
pb.start();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
服务器可能会停机的原因有很多:
- 内部错误(如OutOfMemory)——在这种情况下,不会调用ServletContextListener
- 有人杀死了应用服务器-永远不会调用ServletContextListener
- 显式停止上下文(例如,在管理器中)-将调用ServletContextListener
- 显式停止整个应用程序服务器-ServletContextListener被调用
hth服务器可能会停机的原因有很多:
- 内部错误(如OutOfMemory)——在这种情况下,不会调用ServletContextListener
- 有人杀死了应用服务器-永远不会调用ServletContextListener
- 显式停止上下文(例如,在管理器中)-将调用ServletContextListener
- 显式停止整个应用程序服务器-ServletContextListener被调用
hth您是否已将ServletContextListener
放入web.xml
看看这个例子:您是否将ServletContextListener
放入了web.xml
看看这个例子:您使用什么Web服务器?调用了contextInitialized方法吗?你有没有考虑过在它们里面放一行System.out.println来检查它们是否被调用?这是在这里发布时的打字错误。。。这将在两个位置进行测试您是否在方法中放置System.out.println(“HERE!”)来检查它们是否被调用?您使用什么Web服务器?是否调用了contextInitialized方法?你有没有考虑过在它们里面放一行System.out.println来检查它们是否被调用?这是在这里发布时的打字错误。。。这将在两个位置进行测试您是否在方法中放置System.out.println(“HERE!”)来检查它们是否被调用?感谢您的回复,我想了解上面的代码是否正确。请尝试添加一个“pb.waitFor();”,以便进程可以同步执行!感谢您的回复,我想了解上面的代码是否正确。请尝试添加一个“pb.waitFor();”,以便进程可以同步执行!谢谢回复!!是的,ServletContextListener已添加到web.xml.FYI…或者,作为web.xml的替代方案,将注释应用到ServletContextListener
的实现中。感谢您的回复!!Yes ServelCOntextListener添加到web.xml.FYI…或者,作为web.xml的替代方案,将注释应用到ServletContextListener
的实现中。