在WAR文件启动时检测tomcat的版本(如果它不在推荐版本上,可能会停止它)

时间:2013-07-04 14:02:32

标签: tomcat tomcat7 war

我有一个java Web应用程序(WAR),我希望能够检测到哪个版本的tomcat正在启动它。有可能这样做吗?

如果是这样,我还想研究如何停止不适合的tomcat的应用程序。

我的(幼稚)谷歌搜索没有帮助我

哈蒂姆

2 个答案:

答案 0 :(得分:1)

直接来自Tomcat FAQ

  

如何获取Tomcat的版本号?

     

javax.servlet.ServletContext.getServerInfo();

     

从Tomcat 5.0.28开始 - 现在有一个version.sh(或   bin目录中的version.bat程序。它会打印版本   Tomcat到标准输出的数量。

答案 1 :(得分:1)

您可以创建一个新的侦听器,它实现ServletContextListener接口,并将其添加到web.xml

<listener>
    <listener-class>cl.tests.servlet.MyServletContextListener</listener-class>
</listener>

然后,在Listener上找到服务器名称/版本,如果不是你想要的话,抛出运行时错误

package cl.tests.servlet;

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

public class MyServletContextListener implements ServletContextListener{

    @Override
    public void contextDestroyed(ServletContextEvent arg0) {
    }

    @Override
    public void contextInitialized(ServletContextEvent arg0) {

            // Find where am I running... 
        String str1 = arg0.getServletContext().getServerInfo();
        System.out.println("Detected runtime : " + str1);       

        if (str1.indexOf("Apache Tomcat/7") < 0)
            throw new RuntimeException("Not a Tomcat 7 server.");       
    }
}

这将阻止整个WAR启动。