启动Spring Boot项目后访问首页报错:HttpServletMapping方法缺失
问题分析与解决方案
错误原因
报错java.lang.NoSuchMethodError: 'javax.servlet.http.HttpServletMapping javax.servlet.http.HttpServletRequest.getHttpServletMapping()'的核心原因是:getHttpServletMapping()是Servlet 4.0规范新增的API,而你手动引入的javax.servlet-api版本为3.1.0,低于该方法要求的版本;同时Spring Boot的spring-boot-starter-web默认集成的Tomcat容器已经适配了高版本Servlet API,两者版本冲突导致方法找不到。
解决方案
1. 移除冲突的Servlet API依赖
直接删除依赖中手动添加的javax.servlet-api节点,spring-boot-starter-web已经内置了适配当前Spring Boot版本的Servlet API依赖,无需手动引入:
<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> </dependency>
2. 统一依赖版本,避免版本不一致
Spring Boot通过依赖管理插件可以自动统一所有Spring相关依赖的版本,建议移除手动指定的版本号,让Spring Boot自动管理:
- 移除
spring-jdbc的version节点 - 移除
spring-boot-starter-validation的version节点 - 移除
spring-security-crypto的version节点
修改后的完整依赖配置示例:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>javax.servlet.jsp-api</artifactId> <version>2.3.2-b02</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-crypto</artifactId> </dependency> </dependencies>
3. 清理缓存并重新构建项目
执行以下命令清理构建缓存,重新编译项目:
- Maven:
mvn clean install
- Gradle(若使用Gradle构建):
./gradlew clean build
内容的提问来源于stack exchange,提问作者mohamed sherif
相关产品推荐
相关产品推荐

