You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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是否强制必填:若请求中无SESSION Cookie,控制器会抛出异常导致404,可临时添加required = false测试:@CookieValue(value = "SESSION", required = false) String sessionId。
  • 检查JSP文件是否存在语法错误,语法错误会导致渲染失败返回404。

内容的提问来源于stack exchange,提问作者Kaleidox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 15:05:17