【问题标题】:Servlet package is not available while building of servlet api and throwing compile time error servlet package is not available构建 servlet api 时 Servlet 包不可用并抛出编译时错误 servlet 包不可用
【发布时间】:2026-02-04 16:55:01
【问题描述】:

我想尝试为 Servlet api 创建一个 maven 项目。我创建了一个名为 HelloWorldServlet 的 servlet,如下所示:

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

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class HelloWorldServlet
 */
@WebServlet("/HelloWord")
public class HelloWorldServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public HelloWorldServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html");
        PrintWriter printWriter  = response.getWriter();
        printWriter.println("<h1>Hello World!</h1>");
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("do post method called");
    }

}

在构建项目时,它会抛出以下错误:

ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] /C:/Project_Work/Other_learn/eclipse_workspace_lear/servletapi/src/main/java/com/learn/servlet/HelloWorldServlet.java:[6,21] package javax.servlet does not exist
[ERROR] /C:/Project_Work/Other_learn/eclipse_workspace_lear/servletapi/src/main/java/com/learn/servlet/HelloWorldServlet.java:[7,32] package javax.servlet.annotation does not exist
[ERROR] /C:/Project_Work/Other_learn/eclipse_workspace_lear/servletapi/src/main/java/com/learn/servlet/HelloWorldServlet.java:[8,26] package javax.servlet.http does not exist
[ERROR] /C:/Project_Work/Other_learn/eclipse_workspace_lear/servletapi/src/main/java/com/learn/servlet/HelloWorldServlet.java:[9,26] package javax.servlet.http does not exist
[ERROR] /C:/Project_Work/Other_learn/eclipse_workspace_lear/servletapi/src/main/java/com/learn/servlet/HelloWorldServlet.java:[10,26] package javax.servlet.http does not exist
[ERROR] /C:/Project_Work/Other_learn/eclipse_workspace_lear/servletapi/src/main/java/com/learn/servlet/HelloWorldServlet.java:[16,40] cannot find symbol
  symbol: class HttpServlet

我在构建路径中添加了以下 jar 文件: javax.servlet-api-3.0.1.jar 和 servlet-api.jar

所以我请求你们让我知道我在这里缺少什么。提前致谢。

【问题讨论】:

    标签: servlets servlet-3.0


    【解决方案1】:

    手动将库添加到 Eclipse 的构建路径不会自动将其添加到 maven 构建生成的文件中。仅当通过在 pom 文件中添加其依赖项来加载该文件时才会添加该文件。

    所以这里我们需要执行两个步骤,首先我们将jar文件复制到maven本地存储库,然后将其依赖添加到pom.xml文件中,如下所示:

    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-install-plugin</artifactId>
      <version>2.4</version>
      <executions>
        <execution>
        <id>servlet-api-id</id>
        <phase>clean</phase>
        <goals>
          <goal>install-file</goal>                // copy file to local maven repo
        </goals>
        <configuration>
          <packaging>jar</packaging>
          <groupId>javax.servlet</groupId>
          <artifactId>servlet-api</artifactId>
          <version>2.5</version>
          <file>${project.basedir}/lib/servlet-api.jar</file>
        </configuration>
      </execution> 
      </executions>
    </plugin>
    

    -> 然后添加依赖:

    <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
        </dependency>
    

    【讨论】: