我正在尝试在 Tomcat 7 上运行 Spring Boot 应用程序。根据我的理解,它应该与 servlet 3.0 规范兼容。
在我的依赖项中,我将 tomcat 标记为已提供:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope> <!-- Mark as provided so it doesn't interfere when we deploy in container -->
</dependency>
编辑:我添加了属性 <tomcat.version>7.0.59</tomcat.version>
但是我还是无法在tomcat中启动它。我收到此错误:
Caused by: java.lang.NoSuchMethodError: javax.servlet.ServletContext.getVirtualServerName()Ljava/lang/String;
at org.apache.tomcat.websocket.server.WsServerContainer.(WsServerContainer.java:147)
at org.apache.tomcat.websocket.server.WsSci.init(WsSci.java:131)
at org.apache.tomcat.websocket.server.WsSci.onStartup(WsSci.java:47)
这是因为它显然需要 servlet 规范 3.1。
我错过了什么吗?
最佳答案
问题是,spring-boot 还在 spring-boot-starter-tomcat 上配置了 websocket 支持,该支持由 spring-boot-starter-web 包含。根据 Apache 的说法,如果您想要使用 Tomcat 7 进行 Web 套接字,则必须使用 Java 7。 这里:http://tomcat.apache.org/whichversion.html
使用 Java 7 进行编译或排除 websocket 支持
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-websocket</artifactId>
</exclusion>
</exclusions>
</dependency>
关于Spring Boot Servlet API 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32487263/