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

运行JSP/Servlet时遇ClassNotFoundException或HTTP 404错误求助

问题与解决方案

问题描述

点击JSP页面提交按钮后想输出“Hi There!”,但操作时出现两种错误:

  1. HTTP Status 404 – 未找到

    原始服务器未找到目标资源的当前表示,或者不愿透露存在该资源。
    Apache Tomcat/10.0.27

  2. HTTP Status 500 – 内部服务器错误

    消息:实例化servlet类[com.bootcamp.IndexServlet]失败
    描述:服务器遇到意外情况,无法完成请求。
    异常链:
    jakarta.servlet.ServletException: Error instantiating servlet class [com.bootcamp.IndexServlet]
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:356)
    org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)
    org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
    org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:870)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1762)
    org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
    org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    java.base/java.lang.Thread.run(Thread.java:833)
    根本原因:java.lang.ClassNotFoundException: com.bootcamp.IndexServlet

相关代码

index.jsp 文件

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>

    <form action="IndexServlet" >
        <input type="text" name="username">
        <input type="submit">
    </form>
    
</body>
</html>

Servlet 文件

import java.io.IOException;
import java.io.PrintWriter;

import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

public class Index extends HttpServlet{

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {


        PrintWriter out = resp.getWriter();
        out.println("Hi There!");
    }
}

问题原因与解决步骤

这些错误的核心是Servlet的配置、类名、部署路径不匹配,以及类加载失败,逐一解决:

1. 修正Servlet映射与类名的匹配

你的Servlet类名叫Index,但错误提示里Tomcat尝试加载的是com.bootcamp.IndexServlet,表单的action也是IndexServlet,这里完全不对应:

  • 如果你用注解配置(Tomcat 8及以上支持),直接在Servlet类上加@WebServlet注解,指定映射路径:
    import jakarta.servlet.annotation.WebServlet;
    
    @WebServlet("/IndexServlet") // 和表单的action值对应
    public class Index extends HttpServlet{
        // 原有代码不变
    }
    
  • 如果你用web.xml配置,确保配置和类一致:
    <servlet>
        <servlet-name>IndexServlet</servlet-name>
        <servlet-class>Index</servlet-class> <!-- 没有包就直接写类名 -->
    </servlet>
    <servlet-mapping>
        <servlet-name>IndexServlet</servlet-name>
        <url-pattern>/IndexServlet</url-pattern> <!-- 和表单action对应 -->
    </servlet-mapping>
    

2. 确保Servlet类被正确编译部署

ClassNotFoundException说明Tomcat找不到你的Servlet类,要做这些检查:

  • 确认.java文件已经编译成.class文件,普通Web项目里要放到WEB-INF/classes目录;Maven/Gradle项目要确保编译后的class在target/classes或build/classes,打包WAR时被包含进去。
  • 如果想把Servlet放到com.bootcamp包下,要在类顶部加package com.bootcamp;,同时class文件要放在WEB-INF/classes/com/bootcamp/Index.class路径,配置里的类名要写成com.bootcamp.Index。

3. 修正表单action路径(避免404)

表单的action="IndexServlet"是相对路径,容易出问题,改成带项目上下文的绝对路径更稳妥:

<form action="${pageContext.request.contextPath}/IndexServlet" >

这样不管JSP在哪个路径,都能正确映射到Servlet。

4. 确认Tomcat依赖匹配

你用的是Tomcat 10,它用的是Jakarta EE API(jakarta.servlet.*),你的代码已经正确导入了这些包,别混用旧的javax.servlet依赖,否则会导致类加载异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 18:10:34