我有一个 java web 应用程序 (WAR),我希望能够检测到哪个版本的 tomcat 正在启动它。有可能这样做吗?
如果是这样,我还想研究如何停止不适合的 tomcat 的应用程序。
我的(天真的)谷歌搜索对我没有帮助
哈蒂姆
您可以创建一个实现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 启动。
直接来自Tomcat 常见问题解答:
如何获取 Tomcat 的版本号?
javax.servlet.ServletContext.getServerInfo();
从 Tomcat 5.0.28 开始 - bin 目录中现在有一个 version.sh(或 version.bat)程序。它将Tomcat的版本号打印到标准输出。