获取NoSuchMethodError:javax.servlet.ServletContext.getVirtualServerName()

41

我在Tomcat 8部署服务时遇到问题,出现以下错误:

Caused by: java.lang.NoSuchMethodError: javax.servlet.ServletContext.getVirtualServerName()Ljava/lang/String; at org.apache.tomcat.websocket.server.WsServerContainer.(WsServerContainer.java:149) at org.apache.tomcat.websocket.server.WsSci.init(WsSci.java:131) at org.apache.tomcat.websocket.server.WsSci.onStartup(WsSci.java:47) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5244) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) ... 10 more

getVirtualServerName方法是在Servlet 3.1中引入的。从我的 jar中提取MANIFEST.MF后,我得到了以下详细信息:

Specification-Title: Java API for Servlets 
Specification-Version: 3.1 
Specification-Vendor: Sun Microsystems, Inc. 
Implementation-Title: javax.servlet 

这意味着它拥有3.1版本。那么是否还有其他原因导致此错误?请帮忙。


你是从Eclipse运行吗?还是……请告诉我们更多关于你的环境、应用和设置。 - MrSimpleMind
1
我也是这么想的,这就是我问环境的原因... 你使用pom.xml吗?也许你应该将属性更改为<tomcat.version>xxxx</tomcat.version>以适用于Tomcat 8...? - MrSimpleMind
@MrSimpleMind 是的,我正在使用POM。但是我还没有声明 <tomcat.version>。所以如果我不声明它,它会默认使用什么? - Rahman
这是一个Spring解决方案吗?我认为默认情况下它会运行Tomcat 7..所以如果你想运行8xxx..那么需要添加该信息。 - MrSimpleMind
@MrSimpleMind 是的,它使用了Spring框架。 - Rahman
显示剩余3条评论
11个回答

-1

这肯定与javax.servlet的版本和Tomcat的版本有关。

在我的情况下,当我在gradle中声明了没有版本的javax.servlet依赖项时,问题就解决了。像这样 -

compile('javax.servlet:servlet-api')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接