在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"; } }
main-menu.jsp代码
<%@ 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错误页面:
问题根源与解决方案
核心问题
你把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错误。
修复步骤
- 交换两个文件的内容
- 把当前
spring-mvc-demo-servlet.xml中的<web-app>内容剪切到web.xml中 - 把当前
web.xml中的<beans>内容剪切到spring-mvc-demo-servlet.xml中
- 把当前
- 调整视图文件路径
你的视图解析器配置的前缀是/WEB-INF/view/,所以main-menu.jsp必须放在webapp/WEB-INF/view/目录下,从项目目录图看,当前视图文件夹直接在webapp下,需要移动到WEB-INF内部。 - 重新部署项目
- 执行Maven清理构建:
mvn clean install - 停止Tomcat,清理Tomcat的work目录,然后重新启动并部署应用
- 执行Maven清理构建:
额外验证项
- 检查Maven依赖,确保
spring-webmvc等Spring包的版本与Tomcat 9兼容(推荐使用Spring 5.x版本) - 确认控制器所在的
com.luv2code.mvc包被context:component-scan正确覆盖
内容的提问来源于stack exchange,提问作者liberlux
相关产品推荐
相关产品推荐

