Spring MVC无法显示JSP文件,访问对应URL出现白标错误页
Spring MVC返回JSP出现白标错误的排查方案
我正在学习Spring MVC,定义了Controller方法返回JSP视图,但访问对应URL时页面显示白标错误页。已尝试以下操作但问题未解决:
- 更换Tomcat 8替代Tomcat 9
- 切换Spring 5替代Spring 6
- 用
@RestController替换@Controller - 用
ModelAndView替代返回字符串 - 改用web.xml+DispatcherServlet XML配置替代Java配置类
项目相关配置信息
项目路径结构
src/main/ ├── java/com/example/ │ ├── config/ │ │ ├── DispatcherConfig.java │ │ └── ViewResolverConfig.java │ └── controller/HomeController.java ├── resources/ └── webapp/ ├── WEB-INF/views/index.jsp └── index.html
Pom.xml核心依赖
<dependencies> <!-- Spring MVC --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>6.0.0</version> </dependency> <!-- Servlet API --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> <scope>provided</scope> </dependency> <!-- JSP API --> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>javax.servlet.jsp-api</artifactId> <version>2.3.3</version> <scope>provided</scope> </dependency> <!-- JSTL --> <dependency> <groupId>javax.servlet.jsp.jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> </dependencies>
Dispatcher配置类
package com.example.config; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration @EnableWebMvc @ComponentScan(basePackages = "com.example") public class DispatcherConfig implements WebMvcConfigurer { }
ViewResolver配置类
package com.example.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.view.InternalResourceViewResolver; @Configuration public class ViewResolverConfig { @Bean public InternalResourceViewResolver viewResolver() { InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setPrefix("/WEB-INF/views/"); resolver.setSuffix(".jsp"); return resolver; } }
Controller代码
package com.example.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controller public class HomeController { @GetMapping("/home") public String home() { return "index"; } }
排查解决要点
校验JSP路径与ViewResolver匹配度
确认WEB-INF/views/目录下存在index.jsp,ViewResolver的prefix和suffix拼接后路径完全匹配,即/WEB-INF/views/index.jsp必须存在且可访问。使用正确的控制器注解
@RestController会直接将返回值作为JSON或文本响应,不会触发视图解析。必须使用@Controller才能让Spring MVC将返回字符串解析为JSP视图路径。对齐Spring与Servlet容器版本
- Spring 6要求Servlet 5.0+(对应Tomcat 10+),Spring 5对应Servlet 4.0+(Tomcat 9/8.5),版本不匹配会导致JSP解析失败。
- 确保Maven中JSP、Servlet API的
scope设为provided,避免与Tomcat自带jar包冲突。
调整DispatcherServlet映射规则
如果DispatcherServlet映射为/*,会拦截所有请求(包括*.jsp),导致Tomcat默认的JSP处理器无法工作。应将映射改为/,让Spring仅处理控制器请求,JSP请求由Tomcat处理。查看日志定位问题
开启Spring MVC的DEBUG日志,重点查看:- 请求是否进入了Controller的目标方法
- ViewResolver是否成功匹配到JSP视图
- 是否存在视图解析相关的异常信息
确认访问URL的正确性
访问时需包含项目部署的上下文路径,比如项目部署名为springmvc-demo,正确访问地址应为http://localhost:8080/springmvc-demo/home,而非直接/home。
内容的提问来源于stack exchange,提问作者Kocak
相关产品推荐
相关产品推荐

