Spring Boot Servlet API 版本

标签 spring spring-boot

我正在尝试在 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/

相关文章:

java - 如何在 Spring Boot 应用程序中 Autowiring 具有带参数的构造函数的组件

spring - Spring 与 JAXB 有何关系?

spring - 如何在 spring boot 中的嵌入式 tomcat 中配置 conditionUnless?

java - spring data jpa 不必要的左连接

java - 如何测试 Camel 路由是否按顺序调用不同的端点?

java - Spring Config Server 是否有可能从自身获取配置?

java - Spring Boot 过滤器未返回正确的响应

java - 用于更新查询的 JPA @Query 注释(oracle sql 开发人员)——org.hibernate.exception.GenericJDBCException : could not execute query

java - JSON解析错误:无法构造`com.tess4j.rest.model.Image`的实例(尽管至少存在一个Creator):

java - Autowiring bean 不工作上下文 :component scan