# `Servlet`接口解释

> 原文： [https://beginnersbook.com/2014/04/servlet-interface/](https://beginnersbook.com/2014/04/servlet-interface/)

在我关于 [Servlet API](https://beginnersbook.com/2013/05/servlet-api/) 的上一篇指南中，我已经解释过要创建任何 Servlet，你必须直接或间接地实现`Servlet`接口（间接实现意味着扩展那些实现`Servlet`接口的类，这些类是`GenericServlet`和`HttpServlet`） 。

如果您正在创建协议相关的 servlet，例如`httpServlet`，那么您应该扩展`HttpServlet`类，以便扩展`GenericServlet `类的协议无关的`Servlet`。
在本指南中，我不打算详细解释`GenericServlet`和`HttpServlet`，因为我已经在单独的指南中介绍了它们。
**编辑**：以下是这些指南的链接： [`GenericServlet`](https://beginnersbook.com/2014/04/genericservlet-class/)，[`HttpServlet`](https://beginnersbook.com/2013/05/http-servlet/) 。

> 总之，你有 3 种方法来创建一个 servlet：
> 
> 1）通过扩展`HttpServlet`类
> 
> 2）通过扩展`GenericServlet`类
> 
> 3）通过实现`Servlet`接口
> 
> 注意：但是你应该总是喜欢第一个创建 servlet 的方法，即通过扩展`HttpServlet`类。

### `Servlet`接口方法

以下是`Servlet`接口中可用的方法列表。

1） `void destroy()`：这个方法在 [servlet 生命周期](https://beginnersbook.com/2013/05/servlet-life-cycle/)结束时由 Servlet 容器调用。与在生命周期中多次调用的`service()`方法不同，此方法在整个生命周期中仅由 Servlet 容器调用一次。一旦调用了`destroy()`方法，servlet 容器就不会为该 servlet 调用`service()`方法。

2） `void init(ServletConfig config)`：当 Servlet 容器启动时（在 Web 服务器启动时发生），它加载所有 servlet 并实例化它们。在为每个实例化的 servlet 调用此`init()`方法之后，此方法初始化 servlet。

3） `void service(ServletRequest req, ServletResponse res)`：这是在 servlet 生命周期中多次调用的唯一方法。此方法为客户端请求提供服务，每次服务器收到请求时都会调用它。

4） `ServletConfig getServletConfig()`：返回一个`ServletConfig`对象，该对象包含该 servlet 的初始化和启动参数。

5） `String getServletInfo()`：返回有关 servlet 的信息，例如作者，版本和版权。

## 例：

在这个例子中，我们通过扩展`Servlet`接口创建了一个 servlet 类。

`index.html`

```java
<a href="welcome">Click here to call the servlet</a>
```

`DemoServlet.java`

```java
import java.io.*;
import javax.servlet.*;
public class DemoServlet implements Servlet{
   ServletConfig config=null;
   public void init(ServletConfig config){
      this.config=config;
      System.out.println("Initialization complete");
   }

   public void service(ServletRequest req,ServletResponse res)
   throws IOException,ServletException{
       res.setContentType("text/html");
       PrintWriter pwriter=res.getWriter();
       pwriter.print("<html>");
       pwriter.print("<body>");
       pwriter.print("<h1>Servlet Example Program</h1>");
       pwriter.print("</body>");
       pwriter.print("</html>");
   }
   public void destroy(){
       System.out.println("servlet life cycle finished");
   }
   public ServletConfig getServletConfig(){
       return config;
   }
   public String getServletInfo(){
       return "A Demo program written by Chaitanya";
   }
}
```

`web.xml`

```java
<web-app>
<servlet>
   <servlet-name>Beginnersbook</servlet-name>
   <servlet-class>DemoServlet</servlet-class>
</servlet>

<servlet-mapping>
   <servlet-name>Beginnersbook</servlet-name>
   <url-pattern>/welcome</url-pattern>
</servlet-mapping>
</web-app>
```

#### 参考：

[`Servlet` 接口](https://docs.oracle.com/javaee/7/api/javax/servlet/Servlet.html)