• 什么是Servlet?

servlet是一种Java编程语言类,用于扩展托管通过请求 - 响应编程模型访问的应用程序的服务器的功能。尽管servlet可以响应任何类型的请求,但它们通常用于扩展Web服务器托管的应用程序。对于此类应用程序,Java Servlet技术定义了特定于HTTP的servlet类。

javax.servletjavax.servlet.http包编写servlet提供的接口和类。所有servlet都必须实现Servlet定义生命周期方法的 接口。实现通用服务时,可以使用或扩展GenericServlet随Java Servlet API提供类。HttpServlet类提供的方法,如doGetdoPost,用于处理特定的HTTP服务。

  • Servlet生命周期

servlet的生命周期由部署了servlet的容器​​控制。当请求映射到servlet时,容器执行以下步骤。

  1. 如果servlet的实例不存在,则Web容器:

  2. 加载servlet类

  3. 创建servlet类的实例

  4. 通过调用init方法初始化servlet实例(初始化在创建和初始化Servlet中介绍

  5. 容器调用service方法,传递请求和响应对象。写作服务方法中讨论了 服务方法

如果需要删除servlet,则容器通过调用servlet的destroy方法来完成servlet 

  • 创建和初始化Servlet

创建和初始化Servlet

使用@WebServlet批注在Web应用程序中定义servlet组件。此批注在类上指定,并包含有关正在声明的servlet的元数据。带注释的servlet必须至少指定一个URL模式。这是通过在注释上使用 urlPatternsor value属性来完成的。所有其他属性都是可选的,具有默认设置。value 当注释上的唯一属性是URL模式时,请使用该属性; 否则,在使用urlPatterns其他属性时使用该属性。

注释@WebServletjavax.servlet.http.HttpServlet必须扩展 类。例如,以下代码片段定义了具有URL模式的servlet /report

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;

@WebServlet("/report")
public class MoodServlet extends HttpServlet {
    ...

Web容器在加载和实例化servlet类之后以及在从客户端传递请求之前初始化servlet。要自定义此过程以允许servlet读取持久性配置数据,初始化资源以及执行任何其他一次性活动,您可以覆盖 接口init方法Servlet或指定 注释initParams属性@WebServletinitParams属性包含@WebInitParam 注释。如果它无法完成其初始化过程,则servlet会抛出一个UnavailableException

使用初始化参数提供特定servlet所需的数据。相比之下,上下文参数提供可供Web应用程序的所有组件使用的数据。