好好的代码,由于导入了一个maven依赖之后,Tomcat就启动失败了,报出异常,当值项目崩溃.真是心碎了瞬间
错误信息如下:
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2019-04-28 17:31:14.186 ERROR 12404 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter :
***************************
APPLICATION FAILED TO START
***************************
Description:
An attempt was made to call a method that does not exist. The attempt was made from the following location:
org.apache.catalina.authenticator.AuthenticatorBase.startInternal(AuthenticatorBase.java:1178)
The following method did not exist:
javax.servlet.ServletContext.getVirtualServerName()Ljava/lang/String;
The method's class, javax.servlet.ServletContext, is available from the following locations:
jar:file:/D:/%e8%bd%af%e4%bb%b6/apache-tomcat-7.0.63/lib/servlet-api.jar!/javax/servlet/ServletContext.class
jar:file:/D:/repository/org/apache/tomcat/embed/tomcat-embed-core/9.0.17/tomcat-embed-core-9.0.17.jar!/javax/servlet/ServletContext.class
It was loaded from the following location:
file:/D:/%e8%bd%af%e4%bb%b6/apache-tomcat-7.0.63/lib/servlet-api.jar
Action:
Correct the classpath of your application so that it contains a single, compatible version of javax.servlet.ServletContext
Process finished with exit code 1
解决方案
在网上找了很多,大部分都是说,依赖冲突,让统一版本,这个其实不是这个错误,我们可以去jar包下找javax.servlet.ServletContext.getVirtualServerName(),这个方法,在我的机器上发现确实没有这个方法,所以可以认为是servlet-api.jar引起的,我们可以去下载更高版本的Tomcat,然后进入lib下,拷贝servlet-api.jar替换掉低版本的,然后重启应用就行了.
在上述路径中找ServletContext,然后查找里面是否含有getVirtualServerName()这个方法.