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

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";
    }
}

排查解决要点

  1. 校验JSP路径与ViewResolver匹配度
    确认WEB-INF/views/目录下存在index.jsp,ViewResolver的prefix和suffix拼接后路径完全匹配,即/WEB-INF/views/index.jsp必须存在且可访问。

  2. 使用正确的控制器注解
    @RestController会直接将返回值作为JSON或文本响应,不会触发视图解析。必须使用@Controller才能让Spring MVC将返回字符串解析为JSP视图路径。

  3. 对齐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包冲突。
  4. 调整DispatcherServlet映射规则
    如果DispatcherServlet映射为/*,会拦截所有请求(包括*.jsp),导致Tomcat默认的JSP处理器无法工作。应将映射改为/,让Spring仅处理控制器请求,JSP请求由Tomcat处理。

  5. 查看日志定位问题
    开启Spring MVC的DEBUG日志,重点查看:

    • 请求是否进入了Controller的目标方法
    • ViewResolver是否成功匹配到JSP视图
    • 是否存在视图解析相关的异常信息
  6. 确认访问URL的正确性
    访问时需包含项目部署的上下文路径,比如项目部署名为springmvc-demo,正确访问地址应为http://localhost:8080/springmvc-demo/home,而非直接/home。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 10:01:42