Spring 5.3.9 MVC XML配置ViewResolver无法映射Controller问题
Spring 5.3 手动XML配置下JSP视图无法加载修复方案
核心问题排查
你当前遇到的问题和5.3版本移除后缀模式匹配没有直接关系,两个核心疏漏导致功能异常:
- 配置缺失:Spring MVC配置中没有开启默认Servlet转发,DispatcherServlet拦截所有根路径请求后,没有将JSP资源请求转交给Tomcat的默认Servlet处理,视图解析完成后无法读取到实际JSP文件
- 打包错误:你当前的打包方式没有把编译后的Controller类文件放入war包的合规路径,Spring启动时根本扫描不到HomeController,自然无法完成请求映射和视图跳转。后缀模式匹配的变更只影响
@RequestMapping的路径匹配逻辑,比如旧版本访问/xxx.jsp能命中@RequestMapping("/xxx")的规则在5.3默认关闭,你当前映射的是根路径/,完全不受这个变更影响,不需要调整视图解析器配置。
修复步骤
1. 补全编译输出路径
手动构建项目必须严格遵循Servlet规范的目录结构:
- 在
webapp/WEB-INF路径下新建classes文件夹 - 进入src目录执行编译命令,将HomeController编译到classes路径下,命令如下(Windows环境用
;分隔classpath,Linux/macOS替换为:):
javac -cp ".;../webapp/WEB-INF/lib/*" -d ../webapp/WEB-INF/classes main/java/com/controller/HomeController.java
2. 调整Spring MVC配置
修改spring-mvc-demo-servlet.xml,添加默认Servlet放行配置,修正后完整配置如下:
<?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.controller" /> <mvc:annotation-driven/> <!-- 新增配置:放行JSP、静态资源请求到Tomcat默认Servlet --> <mvc:default-servlet-handler/> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=".jsp" /> </bean> </beans>
3. 修正打包命令
不要进入webapp目录执行打包,回到项目根目录mvc-test下执行以下命令,保证war包目录结构合规:
jar -cvf mvc-test.war -C webapp/ .
打包完成后可以解压验证结构:war包根目录直接存在WEB-INF文件夹,WEB-INF下包含classes、lib、views目录和两个xml配置文件,classes目录下存在com/controller/HomeController.class文件即为结构正确。
4. 部署验证
将生成的mvc-test.war放入Tomcat 9的webapps目录,启动服务后访问http://localhost:8080/mvc-test/即可正常加载test-page.jsp。
注意事项
- WEB-INF/lib下的所有Spring相关jar包必须统一为5.3.x版本,不要混放不同大版本的依赖,否则会出现类冲突报错
- 如果启动后仍报404,优先查看Tomcat日志中是否存在
Mapped "{[/]}" onto public java.lang.String com.controller.HomeController.showPage()的打印,存在则说明控制器映射正常,问题出在视图路径或JSP放行配置,不存在则说明类没有被正确扫描,检查classes目录结构和编译输出是否正确。
内容的提问来源于stack exchange,提问作者Shin
相关产品推荐
相关产品推荐

