Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Web服务器关闭时调用contextDestroyed方法_Java_Unix - Fatal编程技术网

Java 在Web服务器关闭时调用contextDestroyed方法

Java 在Web服务器关闭时调用contextDestroyed方法,java,unix,Java,Unix,我创建了一个webapp,它只有一个servletContext列表器 代码如下: 我尝试了Runtime.getRuntime(),但没有成功。因此,虽然谷歌搜索遇到了ProcessBuilder,但它也不起作用 我可以通过在UNix box上从控制台运行来执行脚本 下面代码的目的是在服务器停机时执行sh脚本,如捕获类似echo Hello>test.txt的内容。但当服务器停机时,该脚本不会执行。不确定为什么未调用conextdestromed,或者如果调用conextdestromed为什

我创建了一个webapp,它只有一个servletContext列表器

代码如下: 我尝试了
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
的实现中。