目录
一、概述:
在通过一个 URL 路径发起对一个 Servlet 请求的过程中,其本质是在调用执行 Servlet 实例的 doXX() 方法。该 Servlet 实例创建和使用的过程,被称为Servlet的生命周期。整个生命周期包括:实例 化、初始化、服务、销毁。
1.实例化:
根据 Servlet 请求的路径,查找该 Servlet 的实例。如果实例不存在,则通过调用构造方法,完成 Servlet 实例的创建。
public HomeServlet() {
System.out.println("Servlet实例被创建");
}
2. 初始化:
通过该 Servlet 的实例,调用 init() 方法,执行初始化的逻辑。
//init()初始化阶段:Servlet容器加载Servlet,加载完成后,
//Servlet容器会创建一个Servlet实例并调用init()方法,init()方法只会调用一次
@Override
public void init() throws ServletException {
System.out.println("Servlet实例初始化");
}
3.服务:
通过该 Servlet 的实例,调用 service() 方法,如果子类没有重写该方 法,则调用HttpServlet父类的 service() 方法,在父类的该方法中进行请求方式 的判断,如果是 GET 请求,则调用 doGet() 方法;如果是 POST 请求,则调用 doPost() 方法; 如果子类重写 doXX() 方法,则调用子类重写后的 doXX() 方法; 如果子类没有重写 doXX() 方法,则调用父类的 doXX() 方法,在父类的方法实 现中,返回一个 405 状态码的错误页面。
//根据请求方式的不同调用不同的请求方法
//对于用户的Servlet请求,Servlet容器会创建一个特定于请求的ServletRequest和ServletResponse
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("heizi");
String method = req.getMethod();
System.out.println("请求方式:"+method);
System.out.println(req.getRemoteHost());
}
4 销毁:
服务器关闭或重启时,会销毁所有的Servlet实例,会调用Servlet实例的 des troy() 方法。 405状态码:代表请求的方式服务器不提供
当web应用被终止,或者Servlet容器终止运行,或者Servlet重新装载Servlet新实例时,
//Servlet容器会调用Servlet的destroy()方法
@Override
public void destroy() {
System.out.println("Servlet实例被销毁");
}