Spring Boot访问JSP报404 找不到/WEB-INF/jsp/home.jsp问题
问题产生原因
一共4个核心问题叠加导致JSP找不到报404:
- 视图配置键名错误:你写的
spring.view.prefix/spring.view.suffix不是Spring Boot MVC的合法配置项,正确前缀是spring.mvc.view,缺了mvc段导致配置完全不生效。 - JSP存放路径不符合规范:Spring Boot内嵌Tomcat默认只会从
src/main/webapp目录下解析WEB-INF资源,如果你把WEB-INF目录建在src/main/resources下,运行时根本不会被扫描到。 - JSP解析依赖作用域配置错误:你把
tomcat-embed-jasper的scope设为provided,该配置表示依赖仅在编译、测试阶段生效,运行时由外部容器提供,但你用内嵌Tomcat启动时,运行环境缺JSP解析引擎,无法处理JSP文件。 - 打包形式限制:Spring Boot官方明确说明,内嵌Tomcat不支持以jar包形式运行JSP,如果项目打包为jar启动,无论怎么配置都无法正常解析JSP。
另外你IDE提示的Cannot resolve MVC view 'home'警告,就是配置不生效+JSP路径不对共同导致的。
修复步骤
按顺序操作即可解决问题:
- 修正
application.properties中的视图配置,替换为正确的配置键:
spring.mvc.view.prefix=/WEB-INF/jsp/ spring.mvc.view.suffix=.jsp
- 调整项目目录结构,在
src/main下新建webapp目录,将WEB-INF文件夹整体移到该目录下,最终JSP文件路径为src/main/webapp/WEB-INF/jsp/home.jsp,保证webapp和java、resources目录平级。 - 修正
pom.xml中JSP解析依赖的配置,删除tomcat-embed-jasper依赖的providedscope配置,保证内嵌启动时能加载到解析引擎:
<dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> </dependency>
如果后续需要将项目打包部署到外部Tomcat,再把该依赖的scope改回provided即可。
4. 如果你需要打包运行项目,在pom.xml的<artifactId>节点下添加war包配置,不要用jar包启动JSP项目:
<packaging>war</packaging>
- 执行
mvn clean清空旧编译缓存,重启项目即可正常访问JSP页面。
注:你现有控制器、启动类、JSP文件本身的代码没有逻辑问题,不需要修改。
内容的提问来源于stack exchange,提问作者Ali Bazargani
相关产品推荐
相关产品推荐

