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

Spring MVC+Maven项目Tomcat9部署后出现404资源错误求助

解决Spring MVC + Tomcat 9的404资源错误问题

我看了你的配置细节,Tomcat启动正常但访问出现404,大概率是Spring MVC的请求映射或配置细节出了问题,下面是几个排查和修复的方向:

1. Controller方法缺少请求映射注解

你的rcontroller类上标注了@RequestMapping("/"),但方法getFoosBySimplePath()没有添加任何请求映射注解(比如@GetMapping或@RequestMapping)。在Spring 4.x中,仅靠类上的路径注解不会自动把方法映射到对应路径,必须给方法也加上映射注解,否则Spring无法识别这是一个请求处理方法。

修改后的Controller代码:

package com.mycompany.myspring;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("/")
public class rcontroller {
    @GetMapping // 也可以用 @RequestMapping(method = RequestMethod.GET)
    @ResponseBody
    public String getFoosBySimplePath() {
        return "Get some Foos";
    }
}

2. 确认项目结构与配置文件路径匹配

你在web.xml里指定了contextConfigLocation为WEB-INF/dispatch-servlet.xml,要确保这个文件确实存在于WebContent/WEB-INF目录下(因为你的maven-war-plugin配置了warSourceDirectory为WebContent)。如果路径错误,Spring无法加载配置文件,导致Controller无法被扫描到。

标准的项目结构参考:

SpringMVC/
├── src/
│   └── main/
│       ├── java/
│       │   └── com/
│       │       └── mycompany/
│       │           └── myspring/
│       │               └── rcontroller.java
│       └── resources/
└── WebContent/
    ├── WEB-INF/
    │   ├── dispatch-servlet.xml
    │   ├── web.xml
    │   └── lib/
    └── (静态资源或页面文件)

3. 修正Servlet API依赖版本

你的web.xml声明的是Servlet 3.0版本,但pom.xml里依赖的是servlet-api:2.5,虽然scope设为provided,但Tomcat 9支持的是Servlet 3.1规范,版本不匹配可能引发潜在兼容性问题。建议替换为符合Tomcat 9的依赖:

<!-- 替换原有的servlet-api依赖 -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>

4. 检查应用上下文路径

Tomcat默认会把war包名称作为应用上下文路径,你的pom.xml里finalName是SpringMVC,所以正确的访问地址应该是http://localhost:8080/SpringMVC/,而非直接访问http://localhost:8080/(除非你在Tomcat里配置了该应用为默认根应用)。

验证步骤

  1. 重新打包部署应用,确保Tomcat控制台无报错信息;
  2. 访问修正后的地址,查看是否返回预期的"Get some Foos";
  3. 如果问题仍存在,查看Tomcat日志目录下的localhost.log和localhost_access_log.*.txt,确认请求是否到达DispatcherServlet,以及Spring是否成功扫描到Controller类。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 16:22:35