1

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

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

我的(天真的)谷歌搜索对我没有帮助

哈蒂姆

4

2 回答 2

1

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

<listener>
    <listener-class>cl.tests.servlet.MyServletContextListener</listener-class>
</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 启动。

于 2013-07-04T14:32:41.060 回答
1

直接来自Tomcat 常见问题解答

如何获取 Tomcat 的版本号?

javax.servlet.ServletContext.getServerInfo();

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

于 2013-07-04T14:08:41.363 回答