Gradle构建的Spring Boot项目JSP页面被下载而非渲染如何解决?
问题原因
- 依赖类型引入错误:当前引入的
org.apache.tomcat:tomcat-jasper是外置Tomcat使用的JSP解析依赖,Spring Boot 内置Tomcat运行需要使用tomcat-embed-jasper依赖,缺少正确依赖会导致JSP无法被服务端解析,直接以二进制文件形式返回给浏览器触发下载。 - 依赖版本不匹配:手动指定的
tomcat-jasper:9.0.31和Spring Boot 2.5.6内置的Tomcat 9.0.54版本不兼容,进一步导致解析逻辑失效。 - 路径匹配问题:如果
src/main/webapp/view/目录下不存在和Controller返回值一致的Home.jsp文件(大小写完全匹配),也会出现资源直接下载的问题。
解决步骤
- 修正build.gradle依赖配置,删除原有的
tomcat-jasper依赖,替换为内置Tomcat对应的JSP解析依赖,不需要手动指定版本,由Spring Boot依赖管理自动匹配兼容版本:
dependencies { // 其余原有依赖保持不变 implementation 'org.apache.tomcat.embed:tomcat-embed-jasper' implementation 'javax.servlet:jstl' }
- 校验JSP文件存放路径:确保
src/main/webapp/view/Home.jsp文件存在,文件名大小写和Controller中返回的"Home"完全一致。 - 调整项目运行方式:Spring Boot 打Jar包默认不支持JSP解析,开发阶段使用
gradle bootRun命令启动项目,生产环境需要将项目打成War包部署到外置Tomcat中运行。 - 清理旧构建产物重新启动:修改完成后执行
gradle clean命令清理历史构建缓存,重新启动项目即可正常渲染JSP页面。
内容的提问来源于stack exchange,提问作者vishwa_001
相关产品推荐
相关产品推荐

