Spring MVC控制器未被调用,请求排查配置问题
Spring MVC控制器未被调用的配置排查方案
我帮你排查了几个关键的配置问题,咱们一步步来修正:
1. web.xml配置的矛盾与路径错误
你的web.xml里存在几处明显的配置冲突和路径错误:
- 上下文类型与配置文件不匹配:你指定了
contextClass为AnnotationConfigWebApplicationContext(用于Java注解配置的上下文),但同时又通过contextConfigLocation指向XML配置文件,这两者是冲突的。如果用XML配置,应该把contextClass改成org.springframework.web.context.support.XmlWebApplicationContext;或者如果想用注解配置,就移除XML路径并改用Java配置类。 - contextConfigLocation路径格式错误:
/webapp.WEB-INF/mvc-servlet.xml的写法不对,正确路径应该是/WEB-INF/mvc-servlet.xml(webapp是Web应用的根目录,不需要写在路径里)。 - 上下文重复加载问题:DispatcherServlet会自动加载名为
[servlet-name]-servlet.xml的配置文件(也就是你的mvc-servlet.xml),不需要通过ContextLoaderListener再加载一次,否则会导致上下文重复加载引发异常。建议移除context-param和ContextLoaderListener的配置,让DispatcherServlet自行加载子上下文。
修正后的web.xml示例:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <display-name>Archetype Created Web Application</display-name> <servlet> <servlet-name>mvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>mvc</servlet-name> <url-pattern>/mvc</url-pattern> </servlet-mapping> </web-app>
2. mvc-servlet.xml的扫描包与视图解析器错误
- 组件扫描包路径错误:
context:component-scan的base-package写了main.java.controller,但main/java是源码目录,不是包名的一部分。如果你的控制器类实际包名是controller(即类在src/main/java/controller目录下),就把base-package改成controller;如果确实是main.java.controller(不推荐这种包命名方式),就保留,但要确认项目包层级和代码里的package声明一致。 - 视图解析器前缀路径错误:
viewResolver的prefix配置成了/webapp.WEB-INF/view/,正确路径应该是/WEB-INF/view/,WEB-INF直接在Web应用根目录下,不需要额外加webapp前缀。
修正后的mvc-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:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 根据实际包结构修改base-package --> <context:component-scan base-package="controller"/> <mvc:annotation-driven /> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/view/" /> <property name="suffix" value=".jsp" /> </bean> </beans>
3. 最后确认控制器与文件位置
你的控制器HomePageController的@RequestMapping(value="/home")配置是正确的,结合servlet-mapping的/mvc,访问路径http://localhost:8080/CatalogFacultate/mvc/home是没问题的。另外要确认homepage.jsp确实放在WEB-INF/view/目录下,否则视图解析器也会找不到文件。
内容的提问来源于stack exchange,提问作者1234567
相关产品推荐
相关产品推荐

