原因1:
当前的servlet-api版本太低
3.0以下的依赖为
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5.0</version>
<scope>provided</scope>
</dependency>
实在无法更换依赖时可以使用request.getSession().getServletContext()方法代替
ps: 这样有一个弊端,就是无法完全起到request.getServletContext()方法的作用,只能存在于多个会话的上下文,即在当前浏览器打开新的标签页时数据保持。无法做到打开关闭浏览器,数据依然保持。
原因2:
依赖的残留
虽然pom.xml文件中的依赖是高版本,但是查看当前项目依赖文件时有一低版本的依赖存在,会默认使用低版本的servlet依赖,导致javax.servlet-api中的request.getServletContext()方法被隐藏。
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
解决方法: 保留高版本,将低版本的servlet依赖删除即可