-
什么是Servlet?
servlet是一种Java编程语言类,用于扩展托管通过请求 - 响应编程模型访问的应用程序的服务器的功能。尽管servlet可以响应任何类型的请求,但它们通常用于扩展Web服务器托管的应用程序。对于此类应用程序,Java Servlet技术定义了特定于HTTP的servlet类。
在javax.servlet
与javax.servlet.http
包编写servlet提供的接口和类。所有servlet都必须实现Servlet
定义生命周期方法的 接口。实现通用服务时,可以使用或扩展GenericServlet
随Java Servlet API提供的类。本HttpServlet
类提供的方法,如doGet
和doPost
,用于处理特定的HTTP服务。
-
Servlet生命周期
servlet的生命周期由部署了servlet的容器控制。当请求映射到servlet时,容器执行以下步骤。
-
如果servlet的实例不存在,则Web容器:
-
加载servlet类
-
创建servlet类的实例
-
通过调用
init
方法初始化servlet实例(初始化在创建和初始化Servlet中介绍)
如果需要删除servlet,则容器通过调用servlet的destroy
方法来完成servlet 。
-
创建和初始化Servlet
创建和初始化Servlet
使用@WebServlet
批注在Web应用程序中定义servlet组件。此批注在类上指定,并包含有关正在声明的servlet的元数据。带注释的servlet必须至少指定一个URL模式。这是通过在注释上使用 urlPatterns
or value
属性来完成的。所有其他属性都是可选的,具有默认设置。value
当注释上的唯一属性是URL模式时,请使用该属性; 否则,在使用urlPatterns
其他属性时使用该属性。
注释@WebServlet
的javax.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
属性@WebServlet
。该initParams
属性包含@WebInitParam
注释。如果它无法完成其初始化过程,则servlet会抛出一个UnavailableException
。
使用初始化参数提供特定servlet所需的数据。相比之下,上下文参数提供可供Web应用程序的所有组件使用的数据。