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

Spring MVC未显示预期结果:为何始终展示Tomcat默认页而非test.jsp?

嘿,我来帮你排查下为啥Spring MVC没跳到你的test.jsp反而显示Tomcat默认页面,大概率是这几个地方出了问题,一个个来核对:

1. DispatcherServlet 映射配置没覆盖到你的请求

DispatcherServlet是Spring MVC的核心入口,如果它没接住你的请求,Tomcat就会直接返回默认页面。

  • 如果你用XML配置(web.xml),检查DispatcherServlet的<url-pattern>:
    • 要是你设成了*.do这类后缀匹配,那你的请求路径必须带.do(比如/test.do)才会被处理;
    • 推荐设成/,这样除了JSP请求外的所有请求都会交给DispatcherServlet处理,但要注意静态资源的处理(不过你现在的问题是JSP页面,先确保映射正确)。
      示例配置:
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/spring-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    
  • 如果你用Java配置(WebApplicationInitializer实现类),检查addServlet时的映射路径:
    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
        context.register(SpringMvcConfig.class);
        ServletRegistration.Dynamic dispatcher = servletContext.addServlet("dispatcher", new DispatcherServlet(context));
        dispatcher.setLoadOnStartup(1);
        dispatcher.addMapping("/"); // 这里的映射要确保覆盖你的请求路径
    }
    
2. Controller 的请求映射路径不匹配

你写的Controller有没有正确映射到你访问的路径?比如你期望访问/test跳转到test.jsp,但Controller的方法映射错了路径,那请求根本到不了处理逻辑。
举个正确的示例:

@Controller
public class TestController {
    // 确保这里的路径和你浏览器输入的一致
    @GetMapping("/test")
    public String showTestPage() {
        return "test"; // 返回的视图名要和视图解析器的配置对应
    }
}

注意:如果Controller类上加了@RequestMapping("/api"),那完整的访问路径就是/api/test,别漏了前缀!

3. 视图解析器配置缺失或路径错误

Spring MVC需要视图解析器把你返回的视图名(比如上面的test)转换成实际的JSP文件路径,如果没配置或者路径错了,就找不到页面,甚至可能 fallback到Tomcat默认页。

  • XML配置(spring-servlet.xml):
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/"/> <!-- JSP文件所在的前缀路径 -->
        <property name="suffix" value=".jsp"/> <!-- 文件后缀 -->
    </bean>
    
  • Java配置(Spring MVC配置类):
    @Configuration
    @EnableWebMvc
    @ComponentScan(basePackages = "com.yourpackage.controller")
    public class SpringMvcConfig implements WebMvcConfigurer {
        @Override
        public void configureViewResolvers(ViewResolverRegistry registry) {
            InternalResourceViewResolver resolver = new InternalResourceViewResolver();
            resolver.setPrefix("/WEB-INF/views/");
            resolver.setSuffix(".jsp");
            registry.viewResolver(resolver);
        }
    }
    

同时要确保你的test.jsp确实放在/WEB-INF/views/目录下,位置错了肯定找不到!

4. 项目部署的上下文路径不对

你是不是直接访问了localhost:8080/?如果你的项目在Tomcat里的部署上下文路径不是/(比如是/myapp),那正确的访问路径应该是localhost:8080/myapp/test,直接访问根路径的话Tomcat就会返回默认页面。
怎么查?在IDE的Tomcat部署配置里看“Context Path”,或者Tomcat的conf/server.xml里的<Context>标签的path属性。

5. Web.xml 的欢迎页配置干扰

如果web.xml里配置了欢迎页(比如index.html或index.jsp),当你访问根路径时,Tomcat会优先加载欢迎页,而不是走你的Controller。这时候你需要访问具体的请求路径(比如/test),而不是根路径。
示例欢迎页配置:

<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>
6. 依赖缺失或版本冲突

确保你的项目里已经引入了Spring MVC和Servlet API的正确依赖,避免因为依赖问题导致Spring MVC没正常启动:
Maven示例(pom.xml):

<!-- Spring MVC 依赖 -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.3.20</version> <!-- 选择适配你Tomcat版本的Spring版本 -->
</dependency>
<!-- Servlet API,设为provided避免和Tomcat自带的冲突 -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
    <scope>provided</scope>
</dependency>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:53:57