同一段Servlet代码在两个Tomcat项目中一个返回200一个返回404
问题场景
个人项目HealthHelper中,通过Postman请求http://localhost:8080/HealthHelper/dietDiary/query/byTime,Tomcat v9.0能正常处理,返回200状态码,控制台输出符合预期。但将相同的QueryDietDiaryByDateAndTimeController代码复制到团队项目HealthyHelperServer后,请求http://localhost:8080/HealthyHelperServer/dietDiary/query/byTime返回404,控制台无任何输出。已排查以下项:
- 代码一致性(Controller代码完全一致)
- Tomcat运行状态及版本(均为v9.0,正常启动)
- 项目facet配置(Java facet均为12)
- URL路径正确性(已核对上下文路径和接口路径)
下一步排查方向
检查Spring组件扫描配置
确认团队项目的Spring配置文件(如applicationContext.xml或spring-mvc.xml)中,是否配置了正确的组件扫描路径,确保QueryDietDiaryByDateAndTimeController所在的包被包含在内。例如:<context:component-scan base-package="com.yourpackage.controller"/>若使用注解驱动(如
@SpringBootApplication),需确认启动类所在包是否能覆盖Controller的包路径。核对Web.xml配置
检查团队项目的web.xml中,DispatcherServlet的映射路径是否正确,是否拦截了接口请求。例如:<servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>同时确认DispatcherServlet的配置文件路径是否正确,避免因找不到配置文件导致Controller未被加载。
查看Tomcat部署日志
启动团队项目时,仔细查看Tomcat的启动日志(如localhost.log或catalina.out),检查是否有Controller加载失败的异常信息,比如类初始化错误、依赖缺失等。检查项目依赖
对比个人项目和团队项目的pom.xml(Maven)或build.gradle(Gradle),确认Spring MVC相关依赖的版本是否一致,是否存在缺失的依赖(如spring-webmvc)。验证Controller注解
再次确认Controller类上的注解是否正确:- 类上是否标注了
@Controller或@RestController - 请求映射注解
@RequestMapping(或@GetMapping/@PostMapping)的路径是否与请求URL匹配,注意是否有多余的前缀或大小写问题
- 类上是否标注了
检查项目部署路径
在Eclipse中查看团队项目的部署路径,确认Tomcat实际部署的项目上下文路径是否为HealthyHelperServer,避免因部署时上下文路径被修改导致URL不匹配。清理并重新部署项目
清理团队项目的编译目录(如target或build文件夹),然后重新编译部署,避免因旧的编译文件残留导致问题。
内容的提问来源于stack exchange,提问作者黃奕捷

