Spring Boot整合MVC与JSP遇404错误,无法渲染JSP页面
Spring Boot整合JSP出现404/下载JSP文件的解决方案
1. 补充必要依赖
Spring Boot原生不支持JSP渲染,必须添加JSP编译引擎和标准标签库依赖,Gradle配置如下:
dependencies { // 原有依赖保留 implementation 'org.apache.tomcat.embed:tomcat-embed-jasper' implementation 'javax.servlet:jstl' // 若使用Spring Boot 3.x,替换为Jakarta版本依赖: // implementation 'org.apache.tomcat.embed:tomcat-embed-jasper' // implementation 'jakarta.servlet.jsp.jstl:jakarta.servlet.jsp.jstl-api' // implementation 'org.glassfish.web:jakarta.servlet.jsp.jstl' }
2. 调整项目结构与视图配置
将JSP文件移至WEB-INF目录下(该目录下文件无法直接通过URL访问,符合Spring MVC安全规范),修改后项目结构:
src/ - main/java/ - resources/static/ - style.css - webapp/ - WEB-INF/ - jsp/ - account/ - view.jsp
同步修改application.properties的视图解析规则:
spring.mvc.view.prefix=/WEB-INF/jsp/ spring.mvc.view.suffix=.jsp
控制器返回的account/view路径会自动解析为/WEB-INF/jsp/account/view.jsp。
3. 配置Gradle打包与运行规则
启用War打包
在build.gradle中添加War插件,并指定主类(若主类不在默认包路径下):
plugins { id 'org.springframework.boot' version 'x.x.x' id 'java' id 'war' // 开启War打包支持 } springBoot { mainClass = 'com.yourpackage.YourApplication' // 替换为你的主类全路径 } // 确保IDE运行时能识别webapp目录 sourceSets { main { resources { srcDirs = ['src/main/resources', 'src/main/webapp'] } } }
运行注意事项
- 本地开发用
./gradlew bootRun启动,不要直接用java -jar运行War包(该方式仅适用于部署到外部Tomcat)。 - 若部署到外部Tomcat,需将War包放入Tomcat的
webapps目录,访问路径需追加War包名称(如War包名为account-app.war,访问路径为localhost:8080/account-app/account/view)。
4. 排查其他潜在问题
- 确认控制器使用
@Controller注解,而非@RestController(后者会直接返回字符串,不触发视图解析)。 - 检查
@CookieValue是否强制必填:若请求中无SESSIONCookie,控制器会抛出异常导致404,可临时添加required = false测试:@CookieValue(value = "SESSION", required = false) String sessionId。 - 检查JSP文件是否存在语法错误,语法错误会导致渲染失败返回404。
内容的提问来源于stack exchange,提问作者Kaleidox
相关产品推荐
相关产品推荐

