在Servlet 3.1版本后,方法getVirtualServerName才被添加到的ServletContext中。查找java文档的方法getVirtualServerName
出现这个问题至少检查三处可能导致的原因:
-
1.servlet版本比3.1低
-
2.其他jar包servlet版本比3.1低
-
3.tomcat version版本比8低
Ⅰ首先,检查在pom.xml中下面依赖:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
Ⅱ如果依赖项正确,接下来检查其它jar包中依赖项:
mvn dependency:tree -Dverbose -Dincludes=<groupId>:<artifactId>
可以只填写<groupId>和<artifactId>中的一项,在这里为:
mvn dependency:tree -Dverbose -Dincludes=javax.servlet:javax.servlet-api
执行命令后可能会重新编译一边,编译完毕后输出类似于下面:
[INFO]com.*:*:jar:1.5.6.RELEASE
[INFO] \- javax.servlet:javax.servlet-api:jar:3.1.0:compile
如果servlet-api版本有低于3.1的依赖项,那么在依赖项中去除此依赖,如下:
<!-- 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>
Ⅲ 检查tomcat版本,使用mvn dependency:tree -Dverbose -Dincludes=:*tomcat*命令,若版本号低于8.0,可以通过下面方式指定版本号(查看官方文档):
<properties>
<tomcat.version>7.0.59</tomcat.version>
</properties>
<dependencies>
...
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-juli</artifactId>
<version>${tomcat.version}</version>
</dependency>
...
</dependencies>
references:
[1]docs.spring.io/spring-boot…