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

Servlet运行报错:服务器未找到目标资源当前表示问题排查

问题描述

开发基础Servlet演示项目时,运行项目或访问index.html均触发「服务器未找到目标资源的当前表示」错误。已按规范完成web.xml中Servlet的注册与映射配置,也将Servlet相关依赖jar包添加至项目构建路径,尝试过网上公开的多种解决方案均无效,无法定位报错根因。

附:项目核心代码

Login Servlet 代码(包名:Main)

package Main;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.*;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Login extends HttpServlet {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    
    Login(){
        super();
    }

    public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException 
    {
        
        System.out.println("servlet called");
        
        
    }
}

web.xml 配置

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

<servlet-mapping>
   <servlet-name>Login</servlet-name>
   <url-pattern>/Login</url-pattern>
</servlet-mapping>

  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
</web-app>

index.html 首页代码

<!DOCTYPE html>
<html>

<body>
    <form action="Login" method="get">
        <input type="text" name="username"/><br>
         <input type="text" name="password"/>
         <input type="submit" value="Login"/>
    </form>
</body>
</html>
排查方向与修复方案

按优先级逐一排查以下常见问题即可定位根因:

  • 检查项目部署的目录结构是否符合Servlet规范
    • Java源码编译后的class文件必须放在WEB-INF/classes/目录下,且包层级和包名完全对应:即Main.Login类编译后的Login.class必须位于WEB-INF/classes/Main/路径下。多数IDE默认的Java项目编译输出路径不会自动指向Web项目的classes目录,仅配置build path不会自动完成class文件的部署,这是该类404问题最高发的原因。
    • index.html必须放在Web应用根目录(和WEB-INF文件夹同级),不能放在WEB-INF目录内,也不能放在src源码目录下,否则欢迎页规则无法匹配到目标文件。
    • Servlet-api相关jar包仅需在编译阶段引入,不要随项目放在WEB-INF/lib目录下部署,否则会和Servlet容器自身提供的API产生版本冲突,导致类加载失败。
  • 检查访问路径是否正确
    • 访问首页时必须带上项目部署的上下文路径,例如项目部署上下文名为FirstServlet时,正确访问地址为http://localhost:8080/FirstServlet/,直接访问根地址http://localhost:8080无法匹配到对应项目的资源。
    • 表单配置的相对路径action="Login"本身没有问题,只要首页访问路径正确,提交时会自动拼接为符合映射规则的地址,无需额外修改。
  • 检查Servlet类的访问权限
    • 当前代码中Login类的无参构造方法使用默认包访问权限,部分Tomcat等Servlet容器通过反射实例化Servlet时,要求类和无参构造方法必须为public修饰,将构造方法修改为如下即可:
      public Login(){
          super();
      }
      
  • 补充说明:当前doGet方法仅在控制台打印日志,没有向响应对象写入任何返回内容,请求处理完成后会显示空白页,属于正常逻辑,不属于404资源找不到的错误范畴,若需要返回可见页面内容,补充响应输出逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 08:36:18