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
相关产品推荐
相关产品推荐

