Reh*_*man 25 java servlets tomcat8
在Tomcat 8中部署服务时遇到问题.出现以下错误:
引起:java.lang.NoSuchMethodError:javax.servlet.ServletContext.getVirtualServerName()Ljava/lang/String; 在org.apache.tomcat.websocket.server.WsServerContainer.(WsServerContainer.java:149)在org.apache.tomcat.websocket.server.WsSci.init(WsSci.java:131)在org.apache.tomcat.websocket. server.WsSci.onStartup(WsSci.java:47)在org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5244)在org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) ......还有10个
方法getVirtualServerName是在Servlet 3.1中引入的,MANIFEST.MF从我的servlet-apijar中提取后我得到了以下细节:
Specification-Title: Java API for Servlets
Specification-Version: 3.1
Specification-Vendor: Sun Microsystems, Inc.
Implementation-Title: javax.servlet
Run Code Online (Sandbox Code Playgroud)
其中说它有3.1.那么这个错误还有其他原因吗?请帮忙
And*_*gan 17
检查所有Maven(或等效的)依赖项,并确保您 - 或者很可能是另一个依赖项 - 没有引入javax.servlet / servlet-api可能优先于Tomcat 8中的内容的3.1之前的版本.如果您已手动部署,确保您没有手动将任何servlet-api JAR复制到Tomcat本身.
请参阅:https://stackoverflow.com/a/26232535/954442
Jav*_*all 14
该方法getVirtualServerName已在Servlet 3.1中的ServletContext中添加.找到java doc的方法getVirtualServerName
这个问题可能至少有3个原因:
你的servlet版本比3.1更旧.
其他jar的servlet版本比3.1旧.
你的tomcat版本早于8
要解决它,你可以尝试以下方式.
I.检查你的pom.xml是否有以下代码.
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
如果你的pom.xml有上面的代码,它仍然会有这个问题.你可以做第二种方式.
II.检查你的其他jar有没有参考javax.servlet-apijar.例如,org.apache.santuario它指的是javax.servlet-apijar.pom.xml:
<dependency>
<groupId>org.apache.santuario</groupId>
<artifactId>xmlsec</artifactId>
<version>1.4.3</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
但是当你看到maven依赖项时,它指的javax.servlet-api是版本比2.3早于2.3 的jar.
所以你应该排除2.3版本.pom.xml中:
<!-- exclude servlet-api 2.3 jar-->
<dependency>
<groupId>org.apache.santuario</groupId>
<artifactId>xmlsec</artifactId>
<version>1.4.3</version>
<exclusions>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- servlet-api 3.1 version has getVirtualServerName() -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
III.spring boot运行默认的tomcat 7.所以定义你的tomcat版本8而不是tomcat 7.所以添加你的pom.xml代码:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<tomcat.version>8.5.5</tomcat.version>
</properties>
Run Code Online (Sandbox Code Playgroud)
小智 6
更新IntelliJ后,我在使用maven的IntelliJ上出现此错误.
我可以用maven运行测试,但不能从我的IDE运行.
我通过删除./idea和project.iml文件并重新加载项目来解决问题.
如果你使用过这个依赖:
<dependency>
<groupId>com.google.oauth-client</groupId>
<artifactId>google-oauth-client-jetty</artifactId>
<version>1.23.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
那么请排除如下:
<dependency>
<groupId>com.google.oauth-client</groupId>
<artifactId>google-oauth-client-jetty</artifactId>
<version>1.23.0</version>
<exclusions>
<exclusion>
<artifactId>servlet-api</artifactId>
<groupId>org.mortbay.jetty</groupId>
</exclusion>
</exclusions>
</dependency>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
33192 次 |
| 最近记录: |