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

Spring视图-文件映射机制及JSP启用依赖报错问题咨询

嘿,我来帮你理清Spring里视图与JSP文件的映射逻辑,还有你遇到的JSP依赖报错问题~

Spring中视图与JSP文件的映射逻辑

和WebSphere里靠XML手动绑定视图与文件不同,Spring(尤其是Spring Boot)是通过**视图解析器(ViewResolver)**来自动处理映射的。控制器返回的视图名称(比如你说的"Homepage"),会由视图解析器按照预设规则找到对应的JSP文件。

1. 默认映射规则(Spring Boot开箱即用)

Spring Boot默认已经配置了InternalResourceViewResolver,它的规则是:

  • 前缀:/WEB-INF/views/
  • 后缀:.jsp

举个实际例子,你的控制器代码如果是这样:

@Controller
public class HomeController {
    @GetMapping("/")
    public String showHomePage() {
        // 返回视图名称,视图解析器会自动拼接成 /WEB-INF/views/Homepage.jsp
        return "Homepage";
    }
}

那Spring就会自动去src/main/webapp/WEB-INF/views/目录下找Homepage.jsp文件。

2. 自定义映射规则(如果你的JSP不在默认路径)

如果你的JSP文件放在其他目录,比如/WEB-INF/jsp/,可以通过两种方式修改规则:

方式一:用Java配置类

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
    @Bean
    public InternalResourceViewResolver customViewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/jsp/"); // 自定义前缀
        resolver.setSuffix(".jsp"); // 自定义后缀
        return resolver;
    }
}

方式二:用application.properties配置(更简单)

在src/main/resources/application.properties里加两行:

spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp

解决JSP依赖报错的问题

你说添加依赖时出现和org.springframework.boot相关的报错,大概率是依赖坐标写错了,或者Spring Boot版本和JSP依赖不兼容。下面分版本给你正确的配置:

如果你用的是Spring Boot 2.x

<!-- JSTL依赖,JSP页面要用它做标签解析 -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
</dependency>
<!-- 内嵌Tomcat的JSP支持依赖,scope设为provided是因为打包时不需要,Tomcat会自带 -->
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
    <scope>provided</scope>
</dependency>

如果你用的是Spring Boot 3.x

Spring Boot 3.x基于Jakarta EE,所以依赖要换成Jakarta的坐标:

<!-- JSTL API依赖 -->
<dependency>
    <groupId>jakarta.servlet.jsp.jstl</groupId>
    <artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
</dependency>
<!-- JSTL实现依赖 -->
<dependency>
    <groupId>org.glassfish.web</groupId>
    <artifactId>jakarta.servlet.jsp.jstl</artifactId>
</dependency>
<!-- 内嵌Tomcat的JSP支持依赖 -->
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
    <scope>provided</scope>
</dependency>

几个关键注意点:

  • 如果你部署到外部容器(比如WebSphere),把tomcat-embed-jasper的scope改成compile或者删掉scope,因为外部容器可能没有自带这个依赖。
  • 确保你的项目结构正确:JSP文件要放在你配置的前缀目录下,比如默认的src/main/webapp/WEB-INF/views/,这个webapp目录是Maven Web项目的标准资源目录,别放错地方。

额外排查小技巧

如果还是找不到视图,你可以检查这几点:

  • 控制器是不是用了@RestController?这个注解会把返回值当成JSON/字符串,而不是视图名称,要换成@Controller。
  • 有没有禁用Spring MVC的自动配置?如果自定义了WebMvcConfigurer,别覆盖掉默认的视图解析器配置。
  • 看启动日志:Spring会打印视图解析器的配置信息,搜InternalResourceViewResolver就能看到它用的前缀和后缀是不是你想要的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:01:23