Servlet生命周期

什么是Servlet生命周期

  • [x] Servlet容器是如何创建Servlet对象,如何为Servlet对象分配,准备资源,如何调用对应的方法来处理请求以及如何销毁Servlet对象的整个过程为Servlet的生命周期

生命周期的是个阶段

  • [x] 阶段一:实例化
  • 实例化阶段是Servlet生命周期的第一步,有Servlet容器调用Servlet的构造器创建一个具体的Servlet对象的过程;这个创建的时间可以是容器收到组件的请求之后进行创建,也可以在容器启动后立即创建;创建代码如下:
1.<servlet>
2.    <servlet-name>Servlet</servlet-name>
3.    <servlet-class>test/Servlet</servlet-class>
4.        <load-on-startup>1</load-on-startup>
5.</servlet>
6.<servlet-mapping> 
7.    <servlet-name>Servlet</servlet-name>
8.    <url-pattern>/*</url-pattern>
9.</servlet-mapping>

配置文件中的load-on-startup用于设置Servlet的创建时间,其中的值大于等于0时,表示容器启动时就会创建实例;当值小于0或者没有指定时,表示Servlet被请求时在创建,正数的值越小,优先级越高,启动时就会越被优先创建

  • [x] 阶段二:初始化
  • Servlet在被加载实例化之后,必须要初始化它,在初始化阶段,init()方法会被调用,这个方法在javax.servlet.Servlet接口中定义;ServletConfig类型的对象作为参数,ServletConfig对象由Servlet引擎负责创建,读取事先在web.xml文件中通过配置的name-value值,一般情况下init方法是不需要编写的,因为GenericServlet提供了init方法的实现(注:init方法只被执行一次)
  • 初始化参数
1.<?xml version="1.0" encoding="UTF-8"?>
2.<web-app version="2.4" 
3.    xmlns="http://java.sun.com/xml/ns/j2ee" 
4.    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
5.    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
6.    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
7.      <servlet>
8.        <servlet-name>Servlet</servlet-name>
9.        <servlet-class>test/Servlet</servlet-class>
10.            <init-param>
11.                <param-name>str</param-name>
12.                <param-value>true</param-valule>
13.            </init-param>
14.    </servlet>
15.    <servlet-mapping> 
16.        <servlet-name>Servlet</servlet-name>
17.        <url-pattern>/*</url-pattern>
18.    </servlet-mapping>
19.</web-app>
  • 读取配置中的初始化方法
1.package test;
2.
3.import java.io.IOException;
4.
5.import javax.servlet.ServletConfig;
6.import javax.servlet.ServletException;
7.import javax.servlet.http.HttpServlet;
8.import javax.servlet.http.HttpServletRequest;
9.import javax.servlet.http.HttpServletResponse;
10.
11.public class Servlet extends HttpServlet{
12.
13.    public void service(HttpServletRequest request,
14.                          HttpServletResponse response) 
15.                          throws ServletException,IOException{
16.        System.out.println("Servlet's service...");
17.        ServletConfig config = getServletConfig();
18.        String str = config.getInitParameter("str");
19.        System.out.println("str:" + str);
20.    }
21.}

阶段三:就绪

  • [x] Servlet被初始化以后就处于能够响应请求的状态,对Servlet的请求由一个ServletRequest对象来表示,Servlet给出的响应由ServletResponse表示;当客户端有请求时,容器会将请求与响应给Servlet,以参数的形式传给service()方法,Servlet通过调用doGet(),doPost()方法来实现响应,doGet(),doPost()方法是由HttpServlet定义的,在没有编写者写方法时,调用会返回一个error信息,所以在每次定义Servlet时都必须去实现doGet(),doPost()方法。

阶段四:销毁

  • Servlet容器在销毁Servlet对象时会调用destroy方法来释放资源,一般情况下Servlet容器停止或者重新启动都会引起销毁Servlet对象的动作;Servlet容器有自己管理Servlet对象的规则,整个生命周期并不需要人为进行干预
原文地址:https://www.cnblogs.com/sinon/p/6019995.html