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

在IntelliJ中Spring MVC自定义视图无法显示的问题求助

问题描述

我正尝试在IntelliJ中创建一个简单的Jakarta EE演示应用,使用Maven作为构建工具、Spring MVC框架,以及Tomcat 9.0.70.0作为本地部署服务器。

应用的webapp文件夹中默认包含index.jsp文件,启动Tomcat后该文件可正常显示。我在webapp/WEB-INF/目录下创建了spring-mvc-demo-servlet.xml配置文件,并修改了默认的web.xml文件,但添加控制器和自定义视图后,重启Tomcat无法正常访问自定义页面,所有尝试均返回Tomcat 404错误。


当前配置文件(文件名与内容不匹配)

错误命名为spring-mvc-demo-servlet.xml的Web部署描述文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
         version="5.0">
    <display-name>spring-mvc-demo</display-name>

    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/spring-mvc-demo-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

错误命名为web.xml的Spring MVC配置文件

<?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:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!-- 组件扫描配置 -->
    <context:component-scan base-package="com.luv2code.mvc" />

    <!-- 注解驱动支持 -->
    <mvc:annotation-driven/>

    <!-- 视图解析器配置 -->
    <bean
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/view/" />
        <property name="suffix" value=".jsp" />
    </bean>

</beans>

项目结构与代码

项目目录结构

项目目录

HomeController代码

package com.luv2code.mvc.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class HomeController {
    @RequestMapping("/")
    public String showHomePage() { return "main-menu"; }
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <h2>Spring MVC Demo - Home Page</h2>
</body>
</html>

尝试过的无效解决方法

  • 删除index.jsp文件
  • 将main-menu.jsp移动到webapp根目录
  • 修改@RequestMapping注解为"/home",并在应用URL后追加home路径
  • 在index.jsp的body中添加<a>标签,href指向自定义视图,点击链接跳转

所有尝试后均出现Tomcat自定义404错误页面:
404错误页面


问题根源与解决方案

核心问题

你把web.xml和spring-mvc-demo-servlet.xml的内容完全写反了:

  • web.xml是Jakarta EE规范的Web应用部署描述文件,必须以<web-app>为根节点,但你现在把Spring的beans配置写进了这个文件
  • spring-mvc-demo-servlet.xml是Spring MVC DispatcherServlet的专属配置文件,必须以<beans>为根节点,但你现在把web.xml的内容写进了这个文件

这种错误导致Tomcat无法正确加载Web应用配置,Spring MVC的DispatcherServlet也无法读取到控制器扫描、视图解析等关键配置,最终引发404错误。

修复步骤

  1. 交换两个文件的内容
    • 把当前spring-mvc-demo-servlet.xml中的<web-app>内容剪切到web.xml中
    • 把当前web.xml中的<beans>内容剪切到spring-mvc-demo-servlet.xml中
  2. 调整视图文件路径
    你的视图解析器配置的前缀是/WEB-INF/view/,所以main-menu.jsp必须放在webapp/WEB-INF/view/目录下,从项目目录图看,当前视图文件夹直接在webapp下,需要移动到WEB-INF内部。
  3. 重新部署项目
    • 执行Maven清理构建:mvn clean install
    • 停止Tomcat,清理Tomcat的work目录,然后重新启动并部署应用

额外验证项

  • 检查Maven依赖,确保spring-webmvc等Spring包的版本与Tomcat 9兼容(推荐使用Spring 5.x版本)
  • 确认控制器所在的com.luv2code.mvc包被context:component-scan正确覆盖

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 18:30:51