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

运行Java Servlet报java.lang.ClassNotFoundException异常如何解决

问题原因

  1. 缺少编译后的Servlet类文件:Tomcat类加载器只会识别WEB-INF/classes目录下的编译后.class文件,你当前仅在源码目录存放了AddServlet.java源文件,未将编译生成的AddServlet.class放入WEB-INF/classes/demo/app/路径下,导致类加载失败。
  2. web.xml版本与运行环境不兼容:你使用的Tomcat 10+Servlet 5属于Jakarta EE规范,而当前web.xml用的是旧的J2EE 2.4版本规范,版本不匹配会导致Servlet配置加载异常。
  3. 项目目录结构不符合规范:当前你将Java源码直接放在src根目录,不符合标准Web项目的源码存放规则,会导致编译工具无法自动将编译后的类文件输出到正确路径。

解决方法

  • 调整项目为标准Maven Web项目结构,修改后的结构如下:
└── src
    ├── main
    │   ├── java
    │   │   └── demo
    │   │       └── app
    │   │           └── AddServlet.java
    │   └── webapp
    │       ├── META-INF
    │       ├── WEB-INF
    │       │   ├── classes (编译后的.class文件将自动输出到该目录)
    │       │   ├── lib
    │       │   └── web.xml
    │       └── demo.html
  • 替换web.xml内容为适配Servlet 5的配置:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
         version="5.0">
    <servlet>
        <servlet-name>abc</servlet-name>
        <servlet-class>demo.app.AddServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>abc</servlet-name>
        <url-pattern>/add</url-pattern>
    </servlet-mapping>
</web-app>
  • 编译Java源码,确保编译生成的demo/app/AddServlet.class文件存放在WEB-INF/classes对应路径下,使用IDEA、Eclipse等IDE的情况下,修正结构后IDE会自动完成编译和类文件输出操作。
  • 重新部署项目到Tomcat,重启服务后即可正常访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 16:27:02