我有一个java Web应用程序(WAR),我希望能够检测到哪个版本的tomcat正在启动它。有可能这样做吗?
如果是这样,我还想研究如何停止不适合的tomcat的应用程序。
哈蒂姆
答案 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启动。