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

Spring Boot无法渲染JSP文件,浏览器反而下载该文件求助

排查浏览器下载JSP而非渲染的问题

我太懂这种查了一堆技术文章却还是卡壳的挫败感了——浏览器不渲染JSP反而把它当文件下载,这绝对是Spring Boot配置JSP时最容易踩的坑之一。既然你已经配了基础的文件结构、pom.xml、application.properties、启动类和Controller,还加了解析器却没解决,那咱们从几个最容易被忽略的关键点入手排查:

  • 先确认JSP核心依赖是否齐全
    Spring Boot默认不会自动引入JSP的编译和运行依赖,这是很多人一开始就踩的坑。打开你的pom.xml,检查是否包含这两个关键依赖:

    <!-- 内嵌Tomcat的JSP编译支持 -->
    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
        <!-- 如果是war包部署可以去掉scope,jar包的话建议设为compile -->
        <scope>compile</scope>
    </dependency>
    <!-- JSTL标签库支持 -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
    </dependency>
    

    如果你用的是Spring Boot 3.x,注意依赖要换成Jakarta EE版本:

    <dependency>
        <groupId>jakarta.servlet.jsp.jstl</groupId>
        <artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
    </dependency>
    <dependency>
        <groupId>org.glassfish.web</groupId>
        <artifactId>jakarta.servlet.jsp.jstl</artifactId>
    </dependency>
    
  • 检查application.properties的视图解析配置
    必须明确指定JSP的前缀和后缀,否则Spring找不到对应的视图文件。确保你的配置里有这些内容:

    # JSP文件所在的目录前缀,要和你的实际文件结构对应
    spring.mvc.view.prefix=/WEB-INF/jsp/
    # JSP文件的后缀
    spring.mvc.view.suffix=.jsp
    # 开启内嵌Tomcat的JSP支持(默认可能为true,但显式设置更稳妥)
    server.servlet.jsp.enabled=true
    # 确保Spring MVC的Servlet路径正确,避免请求映射冲突
    spring.mvc.servlet.path=/
    
  • 确认JSP文件的存放路径是否合规
    路径不对的话,Spring根本找不到你的JSP文件,自然会把它当成静态资源下载:

    • 如果你用war包结构:JSP必须放在src/main/webapp/WEB-INF/jsp/目录下(对应上面的prefix配置);
    • 如果你用jar包结构:Spring Boot默认不支持webapp目录,需要把JSP移到src/main/resources/META-INF/resources/WEB-INF/jsp/,同时保持prefix配置为/WEB-INF/jsp/。
  • 排查Controller的返回逻辑
    别小看这个细节——如果你的Controller方法加了@ResponseBody注解,Spring会把返回值当成纯文本/JSON直接返回,浏览器就会把它当成文件下载。确保你的Controller是这样的:

    @Controller // 注意是@Controller,不是@RestController
    public class YourController {
        @GetMapping("/your-path")
        public String yourMethod() {
            // 返回的是视图名称,对应prefix+返回值+suffix
            return "your-jsp-filename";
        }
    }
    

    用@RestController的话,默认会给所有方法加上@ResponseBody,这也会导致JSP无法渲染。

  • 检查自定义解析器是否冲突
    你提到在Controller同包下加了解析器,要警惕这个自定义解析器是不是覆盖了Spring默认的InternalResourceViewResolver(负责解析JSP的视图解析器)。可以先暂时注释掉自定义解析器的代码,重启应用看看问题是否解决。如果解决了,说明你的自定义解析器优先级过高或者没有正确处理JSP视图,需要调整它的order属性,让它的优先级低于默认的JSP解析器。

按照这个顺序一步步排查,大概率能找到问题所在——毕竟JSP渲染失败的核心原因基本都逃不出这几个点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:13:36