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

Spring MVC(Maven)项目控制器无法返回JSP页面(HTTP 404)求助

Maven Spring MVC控制器返回JSP报404错误的排查方案

嘿,我之前也碰到过一模一样的问题!在Maven搭建的Spring MVC项目里,控制器明明写了返回视图名,结果访问就跳404,折腾了好一会儿才找到原因。先看看你提供的spring-servlet.xml配置片段(看起来内容被截断了,不过我可以基于常见问题给你梳理排查方向):

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation=" http://www.springframewor...">
<!-- 你的配置内容 -->
</beans>

下面是几个最容易出问题的地方,你可以逐一排查:

1. 视图解析器是否正确配置

这是最常见的原因!Spring MVC需要InternalResourceViewResolver来把控制器返回的逻辑视图名转换成实际的JSP文件路径。检查你的spring-servlet.xml里有没有这个bean:

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <!-- JSP文件所在的父路径,根据你的项目结构调整 -->
    <property name="prefix" value="/WEB-INF/views/"/>
    <!-- JSP文件的后缀 -->
    <property name="suffix" value=".jsp"/>
</bean>

比如你控制器返回"home",那Spring会去找/WEB-INF/views/home.jsp,如果你的JSP放在别的路径,一定要修改prefix的值。

2. 组件扫描是否覆盖了控制器包

确保你配置了组件扫描,并且包路径准确指向你的控制器所在位置,不然Spring根本找不到你的@Controller类:

<context:component-scan base-package="com.yourpackage.controller"/>

把com.yourpackage.controller换成你实际的控制器包路径。

3. 是否启用了MVC注解驱动

别忘了加<mvc:annotation-driven/>标签,它会自动注册处理@RequestMapping、参数绑定等功能的核心bean,没加的话控制器的请求映射可能完全不生效:

<mvc:annotation-driven/>

4. JSP文件的实际路径是否匹配

手动核对一下JSP文件的位置,比如视图解析器prefix是/WEB-INF/views/,那你的JSP必须放在src/main/webapp/WEB-INF/views/目录下(Maven项目的web资源根目录是src/main/webapp),文件名也要和控制器返回的视图名一致,大小写也要注意!

5. Maven打包是否正确包含了web资源

有时候Maven默认配置会漏掉webapp目录下的文件,导致打包后的war里没有JSP。可以在pom.xml里添加资源配置,确保WEB-INF下的内容被正确打包:

<build>
    <resources>
        <resource>
            <directory>src/main/webapp</directory>
            <targetPath>/</targetPath>
            <includes>
                <include>**/*</include>
            </includes>
        </resource>
    </resources>
</build>

6. 控制器方法有没有误加@ResponseBody

如果你的控制器方法加了@ResponseBody注解,Spring会直接把返回的字符串作为响应内容返回,而不会去寻找对应的JSP页面。比如下面这种写法就会导致404(因为不会找JSP):

@Controller
public class HomeController {
    @RequestMapping("/home")
    @ResponseBody // 这个注解会导致直接返回字符串,不走视图解析器
    public String home() {
        return "home";
    }
}

把@ResponseBody去掉就好了,除非你是要返回JSON或纯文本。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:56:24