You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Tomcat 9部署Java Web应用后调用Web服务触发404错误求助

Tomcat 9部署Java Web应用后调用Web服务触发404错误求助

你好,我来帮你一步步排查这个404问题,下面是几个常见的原因和对应的解决思路:

  • 检查请求的完整URL是否包含应用上下文路径
    你的接口路径是/v1/security/login,但这个路径是相对于你的应用上下文的。比如你部署的war包叫myapp.war,Tomcat默认会把/myapp作为上下文路径,那完整的请求URL应该是http://你的服务器IP:端口/myapp/v1/security/login。很多时候新手会漏掉上下文路径,直接请求/v1/security/login,这就会导致Tomcat找不到资源。你可以去Tomcat的webapps目录看看你的应用文件夹名称,那就是默认的上下文路径。

  • 确认请求方式是否匹配接口定义
    你的接口用@PostMapping标记,说明只能接收POST请求。如果你用了GET请求(比如直接在浏览器地址栏输入,或者测试工具选了GET方法),Tomcat就找不到对应的映射,返回404。一定要确保用POST方式调用这个接口,比如用Postman、curl这类工具时,选对请求方法。

  • 检查Spring控制器的配置和加载情况

    • 如果是Spring Boot项目部署到外部Tomcat,要确保启动类继承了SpringBootServletInitializer,否则Servlet容器无法正确扫描你的控制器类:
      @SpringBootApplication
      public class YourAppApplication extends SpringBootServletInitializer {
          @Override
          protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
              return application.sources(YourAppApplication.class);
          }
          public static void main(String[] args) {
              SpringApplication.run(YourAppApplication.class, args);
          }
      }
      
    • 如果是传统Spring MVC项目,要检查web.xml或Java配置类里的DispatcherServlet映射是否正确,比如映射路径要设为/或者能覆盖/v1/...的路径,这样请求才能被DispatcherServlet转发到对应的控制器。
    • 另外,别忘了确认LoginController类上有没有@RestController@Controller注解,没有的话Spring不会把它识别为控制器,自然找不到接口。
  • 查看日志定位问题
    去Tomcat的logs目录,看看localhost_access_log.*.txt,里面会记录每个请求的完整路径、请求方法和状态码,能帮你确认请求到底有没有到达你的应用。同时查看应用自身的日志,看看有没有控制器扫描失败、依赖缺失之类的异常信息,确认LoginController是否被Spring容器正常加载了。

  • 检查依赖是否齐全
    确保项目里引入了正确的Spring Web相关依赖,比如Maven的spring-webmvc(传统Spring MVC)或者spring-boot-starter-web(Spring Boot),如果依赖缺失,控制器功能也无法正常工作。

备注:内容来源于stack exchange,提问作者Mona Kouhi

火山引擎 最新活动