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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:03:25