aaa1934
aaa1934

Reputation: 59

Spring Boot Servlet API Version

I'm trying to run a Spring Boot app on Tomcat 7. From my understanding, it should be compatible with servlet 3.0 spec.

In my dependency, I mark tomcat as provided:

<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>

Edit: And I've added the property <tomcat.version>7.0.59</tomcat.version>

But I still can't start it in tomcat. I'm getting this error:

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)

Which are because it apparently needs servlet spec 3.1.

Am I missing something?

Upvotes: 3

Views: 6251

Answers (1)

Gokhan Oner
Gokhan Oner

Reputation: 3257

The problem is, spring-boot also configure websocket support on spring-boot-starter-tomcat, which is includes by spring-boot-starter-web. And according to Apache, you must use Java 7 if you want web socket with Tomcat 7. Here: http://tomcat.apache.org/whichversion.html

Either compile with Java 7 or exclude websocket support

<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>

Upvotes: 2

Related Questions