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

Tomcat部署WAR包时出现java.lang.ClassNotFoundException如何解决?

解决步骤

java.lang.ClassNotFoundException: api.OrderServlet 报错的核心是Tomcat的Web应用类加载器未在规定路径下找到对应类的编译文件,按以下步骤逐一排查即可解决:

1. 确认Web应用目录结构符合规范

手动部署的Tomcat Web应用必须遵守标准目录结构,你部署在Tomcat webapps 目录下的应用根目录(比如本次的咖啡订单服务可以命名为cafe)结构必须如下:

webapps/
└── cafe/
    ├── WEB-INF/
    │   ├── web.xml  # Servlet核心配置文件
    │   ├── classes/  # 存放所有你自己编译的class文件,严格按包路径创建子文件夹
    │   │   ├── api/
    │   │   │   └── OrderServlet.class
    │   │   └── data/
    │   │       └── Order.class
    │   └── lib/  # 存放所有第三方依赖jar包,比如org.json的jar包、servlet-api之外的所有依赖都要放到该目录
    └── 静态资源(如果有)
  • 重点检查:编译后的OrderServlet.class是否确实放在WEB-INF/classes/api/路径下,包路径和文件夹路径必须完全对应,大小写不能出错。
  • 额外确认:代码中依赖的org.json.JSONObject、Requests类对应的class或jar包也要放到对应路径,缺任何依赖都会间接触发类找不到报错。

2. 确认web.xml配置正确

WEB-INF/web.xml中关于OrderServlet的配置必须和类的全限定名完全匹配,参考配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <servlet>
        <servlet-name>OrderServlet</servlet-name>
        <!-- 此处必须写全限定类名,和类的package+类名完全一致,大小写不能错 -->
        <servlet-class>api.OrderServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>OrderServlet</servlet-name>
        <url-pattern>/orders/*</url-pattern>
    </servlet-mapping>
</web-app>

3. 额外排查项

  • 编译类用的JDK版本和Tomcat运行的JDK版本需要兼容,比如用JDK17编译的class无法在运行JDK8的Tomcat上加载。
  • 编译用的servlet-api版本不要高于当前Tomcat支持的servlet版本,避免版本不兼容导致类加载失败。
  • 所有配置修改完成后重启Tomcat,避免热部署缓存导致修改不生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 12:06:04