Spring Boot+Gradle项目无法加载JSP,控制台输出WEB-INF路径提示
问题及解决方案
问题描述
代码、配置及依赖均无明显错误,但访问项目根路径时,控制台输出:Path with "WEB-INF" or "META-INF": [WEB-INF/views/login.jsp],无法正常打开对应的login.jsp页面。
相关代码与配置
控制器代码
package com.example.mywebsite.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class LoginController { @RequestMapping("/") public String start(){ return "login"; } }
配置文件(application.properties/yml)
spring.mvc.view.prefix=/WEB-INF/views/ spring.mvc.view.suffix=.jsp
build.gradle依赖配置
dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' developmentOnly 'org.springframework.boot:spring-boot-devtools' testImplementation 'org.springframework.boot:spring-boot-starter-test' implementation 'org.springframework.boot:spring-boot-starter-validation' runtimeOnly 'org.apache.tomcat.embed:tomcat-embed-jasper:9.0.41' // JSP解析依赖 runtimeOnly 'javax.servlet:jstl:1.2' // JSTL标签库 runtimeOnly 'mysql:mysql-connector-java' // MySQL驱动 }
login.jsp代码
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Login</title> </head> <body> <h1>Login</h1> </body> </html>
问题原因与解决方法
控制台的日志是Tomcat的安全拦截提示——Tomcat会阻止直接访问WEB-INF/META-INF下的资源,但Spring MVC的视图转发属于内部跳转,本不应触发该拦截。出现这个问题通常是以下原因导致:
1. 视图解析器未生效,请求被当作静态资源处理
当Spring MVC的视图解析配置未生效时,控制器返回的login没有被解析为/WEB-INF/views/login.jsp进行内部转发,而是被当作静态资源路径直接访问,触发了Tomcat的安全拦截。
解决方式:
- 确认
spring.mvc.view.prefix和spring.mvc.view.suffix配置格式正确:前缀末尾带斜杠(/WEB-INF/views/)、后缀开头带点(.jsp)。 - 确保
tomcat-embed-jasper依赖存在且版本与Spring Boot兼容(你的9.0.41版本适配Spring Boot 2.x,无问题)。
2. Spring Boot打包方式不支持JSP
Spring Boot的jar打包方式对JSP支持有限,嵌入式Tomcat无法从jar包中读取WEB-INF下的JSP文件,导致请求无法正确转发。
解决方式:
- 在build.gradle中添加war插件,改为war打包:
apply plugin: 'war' - 若坚持使用jar打包,需将JSP文件移至
src/main/resources/META-INF/resources/WEB-INF/views/目录下(不推荐,war是JSP项目的标准打包方式)。
3. DevTools缓存导致配置未生效
使用spring-boot-devtools时,可能存在资源缓存,导致视图解析的配置或JSP文件未被重新加载。
解决方式:
- 直接重启应用,或在IDE中触发热重载操作,确保配置和资源文件生效。
4. 项目目录结构错误
JSP文件的存放路径必须符合规范:
- war打包:JSP需放在
src/main/webapp/WEB-INF/views/目录下; - jar打包:JSP需放在
src/main/resources/META-INF/resources/WEB-INF/views/目录下。
确认webapp目录位于src/main/下,而非其他路径。
内容的提问来源于stack exchange,提问作者Roland Olajide
相关产品推荐
相关产品推荐

