Spring MVC 无法显示 JSP 页面的常见原因与解决方案

发布时间 - 2025-12-26 00:00:00    点击率:

本文详解 spring mvc 项目中 jsp 视图无法正常渲染的典型问题,重点分析组件扫描范围配置不当导致控制器未被识别、视图解析器失效等核心原因,并提供可立即验证的配置修复方案。

在 Spring MVC 项目中,当访问映射 URL(如 /home)时返回 Whitelabel Error Page(404 或 500),而非预期的 home.jsp,通常并非 JSP 本身语法错误,而是Spring 容器未能正确加载控制器或视图解析链断裂。结合你提供的项目结构与配置片段,最常见且易被忽略的根本原因是:@ComponentScan 扫描路径未覆盖 Controller 所在包

✅ 正确的包结构与组件扫描配置

假设你的项目采用标准 Maven 结构,且 Controller 类位于 com.example.demo.controller.HomeController,那么:

  • ❌ 错误配置(仅扫描 com.example.config):

    @Configuration
    @EnableWebMvc
    @ComponentScan("com.example.config") // ← 仅扫描配置类,Controller 不在此路径下!
    public class WebConfig implements WebMvcConfigurer { ... }
  • ✅ 正确配置(扫描父级基础包):

    @Configuration
    @EnableWebMvc
    @ComponentScan("com.example") // ← 扫描 com.example 及其所有子包(含 controller、service、config 等)
    public class WebConfig implements WebMvcConfigurer { ... }
? 为什么必须是 "com.example"? 因为 @ComponentScan 的值是包前缀匹配,不是通配符。若 Controller 在 com.example.demo.controller,而扫描路径只设为 com.example.config,Spring 将完全忽略该 Controller——它根本不会被注册进 IoC 容器,自然无法响应请求,DispatcherServlet 查找不到对应 handler,最终抛出 404 并显示 Whitelabel 页面。

✅ 补充关键配置检查项(缺一不可)

确保以下配置完整、路径准确:

  1. ViewResolver 必须正确定义(JSP 专用)

    @Bean
    public ViewResolver viewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/"); // 注意结尾斜杠
        resolver.setSuffix(".jsp");
        resolver.setViewClass(JstlView.class); // 启用 JSTL 支持(推荐)
        return resolver;
    }
  2. JSP 文件存放位置必须符合约定
    src/main/webapp/WEB-INF/views/home.jsp —— 路径必须与 viewResolver.setPrefix() 严格一致,且 不能放在 src/main/resources 或 src/main/java 下(这些路径不参与 Web 资源发布)。

  3. Controller 方法需使用 @Controller(非 @RestController)

    @Controller
    public class HomeController {
        @GetMapping("/home")
        public String showHome() {
            return "home"; // → 解析为 /WEB-INF/views/home.jsp
        }
    }
  4. Maven 依赖需包含 JSP 运行时支持(尤其 Spring Boot 3+ 或 Tomcat 10+)
    若使用较新 Tomcat(如 10.x),注意 javax.* 已迁移至 jakarta.*,需确认 pom.xml 中引入的是兼容版本:

    
    
        javax.servlet
        jstl
        1.2
    
    
    
        jakarta.servlet.jsp.jstl
        jakarta.servlet.jsp.jstl-api
        2.0.0
    

⚠️ 注意事项与调试建议

  • 禁用 @RestController:它会强制返回 JSON/文本,忽略 ViewResolver,永远无法跳转 JSP。
  • 检查 Tomcat 日志:启动时搜索 Mapped 关键字,确认类似 Mapped "{[/home]}" 是否出现——若无,则 Controller 未被扫描。
  • 验证 DispatcherServlet 映射:确保 WebApplicationInitializer 或 ServletWebServerFactory 正确注册了 DispatcherServlet,且 urlPatterns 包含 /(非 /*.html 等限制性模式)。
  • 避免混合配置:勿同时使用 XML 配置(dispatcher-servlet.xml)和 Java Config,易引发冲突;统一采用一种方式。

通过将 @ComponentScan("com.example") 设为项目根包,并配合正确的视图解析路径与依赖,90% 以上的“Spring MVC 不显示 JSP”问题即可解决。记住:Spring MVC 的请求流转始于容器发现 Controller,止于 ViewResolver 定位资源——二者缺一不可。


# java  # html  # js  # json  # app  # tomcat  # ai  # spring mvc  # 为什么 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 🚀拖拽式CMS建站能否实现高效与个性化并存?  如何在云主机快速搭建网站站点?  ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法  Android 常见的图片加载框架详细介绍  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  Laravel如何记录自定义日志?(Log频道配置)  实例解析Array和String方法  Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面  Laravel如何使用Blade模板引擎?(完整语法和示例)  Laravel项目结构怎么组织_大型Laravel应用的最佳目录结构实践  Android Socket接口实现即时通讯实例代码  Python企业级消息系统教程_KafkaRabbitMQ高并发应用  高性能网站服务器配置指南:安全稳定与高效建站核心方案  HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  高端网站建设与定制开发一站式解决方案 中企动力  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  什么是javascript作用域_全局和局部作用域有什么区别?  Laravel如何处理异常和错误?(Handler示例)  标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析  Laravel怎么使用Intervention Image库处理图片上传和缩放  如何基于PHP生成高效IDC网络公司建站源码?  西安专业网站制作公司有哪些,陕西省建行官方网站?  如何用已有域名快速搭建网站?  如何用免费手机建站系统零基础打造专业网站?  如何在香港免费服务器上快速搭建网站?  Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载  大同网页,大同瑞慈医院官网?  Laravel如何发送系统通知?(Notification渠道示例)  Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】  PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】  Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性  Bootstrap整体框架之CSS12栅格系统  lovemo网页版地址 lovemo官网手机登录  Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理  夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化  如何快速完成中国万网建站详细流程?  如何在VPS电脑上快速搭建网站?  在线教育网站制作平台,山西立德教育官网?  如何为不同团队 ID 动态生成多个非值班状态按钮  Laravel Debugbar怎么安装_Laravel调试工具栏配置指南  简单实现jsp分页  Laravel如何实现文件上传和存储?(本地与S3配置)  Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】  laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法  利用vue写todolist单页应用