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

Demo应用启动加载index.jsp而非main-menu.jsp问题排查求助

问题排查与修复方案

兄弟,你遇到的这个情况在Spring MVC项目里挺常见的——明明配置了Controller映射,结果默认走了index.jsp,Controller还没被触发,大概率是核心配置没到位或者优先级冲突,我给你拆解几个常见问题点:

1. 核心DispatcherServlet没配置对

Spring MVC全靠DispatcherServlet来接管请求,如果你的web.xml里没配这个核心入口,或者映射路径不对,请求根本不会走到Controller层。

排查&修复:

先检查web.xml里有没有这段配置,要是没有赶紧补上:

<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-config.xml</param-value> <!-- 换成你自己的Spring MVC配置文件路径 -->
    </init-param>
    <load-on-startup>1</load-on-startup> <!-- 启动就加载,确保比其他组件先初始化 -->
</servlet>

<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern> <!-- 把所有请求都交给DispatcherServlet处理 -->
</servlet-mapping>

要是已经配了,看看url-pattern是不是/——如果是*.do这种后缀匹配,那只有带.do的请求才会走Controller,根路径请求自然会被容器默认处理成index.jsp。

2. HomeController没被Spring识别到

要么是你没给Controller加注解,要么是Spring没扫描到这个类所在的包。

排查&修复:

  • 先看你的HomeController类,必须加@Controller注解,而且方法上的映射要对应根路径(或者你想要的触发路径):
    @Controller
    public class HomeController {
        @RequestMapping("/") // 根路径请求就触发这个方法
        public String showMainMenu() {
            return "main-menu";
        }
    }
    
  • 再检查你的Spring MVC配置文件,有没有开启组件扫描,而且要覆盖Controller所在的包:
    <context:component-scan base-package="com.yourproject.controller"/> <!-- 换成你自己的Controller包路径 -->
    

要是没开扫描,Spring根本不知道有这个Controller存在,自然不会调用它。

3. 容器默认欢迎页优先级抢过了Controller

Tomcat这类Servlet容器默认会把index.jsp当欢迎页,当你访问根路径/时,容器会优先找index.jsp,而不是交给DispatcherServlet处理。

排查&修复:

  • 方法一:直接删掉web.xml里的welcome-file-list配置,让DispatcherServlet全权处理根请求;
  • 方法二:修改欢迎页为你的Controller映射路径,比如:
    <welcome-file-list>
        <welcome-file>home</welcome-file> <!-- 对应Controller里@RequestMapping("/home")的路径 -->
    </welcome-file-list>
    
  • 方法三:要是不想删index.jsp,就在index.jsp里加一行跳转代码,主动转发到Controller路径:
    <% response.sendRedirect("/your-app-context/home"); %> <!-- 替换成你的应用上下文和Controller路径 -->
    

4. 视图解析器配置(次要排查点)

虽然你现在的问题是Controller没被触发,但也可以顺便检查下视图解析器,避免后续跳页面出问题:
确保Spring MVC配置文件里有这个Bean:

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/jsp/"/> <!-- 你的jsp文件所在目录前缀 -->
    <property name="suffix" value=".jsp"/> <!-- 后缀,这样return "main-menu"就会找到/WEB-INF/jsp/main-menu.jsp -->
</bean>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:33:03