Servlet 生命周期

原文:https://www.studytonight.com/servlet/servlet-life-cycle.php

servlet life cycle

  1. 加载 servlet 类:当 Web 容器收到对 Servlet 的第一个请求时,就会加载 Servlet 类。
  2. Servlet 实例创建:加载 Servlet 类后,Web Container 创建它的实例。Servlet 实例在生命周期中只创建一次。
  3. Call to the init() method : init() method is called by the Web Container on servlet instance to initialize the servlet.

    init()方法签名:

     public void **init**(ServletConfig config) throws ServletException
    
  4. Call to the service() method : The containers call the service() method each time the request for servlet is received. The service() method will then call the doGet() or doPost() methos based ont eh type of the HTTP request, as explained in previous lessons.

    送达方式签字:

     public void **service**(ServletRequest request, ServletResponse response) throws ServletException, IOException
    
  5. 调用 destroy()方法:Web 容器在移除 servlet 实例之前调用destroy()方法,给它一个清理活动的机会。

在 web.xml 中启动时加载

在 Java 中,默认情况下不会加载 servlet。当一个 servlet 容器收到一个请求时,只加载一个 servlet。第一次加载 servlet 时,与下一次相比,它需要更多的时间。如果您想避免访问时间的延迟,那么可以在 web.xml 文件中使用标记。这个标签强制 servlet 容器在服务器启动时快速加载 servlet。</load-on-startup>

以下是如何使用<开机加载>标签的示例。

Web.xml

     <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
  <servlet>
      <servlet-name>abc</servlet-name>
      <servlet-class>com.app.studytonight.AddServlet</servlet-class>
    <load-on-startup>1</load-on-startup> 
  </servlet>
</web-app>

下面是如何使用<启动时加载>标签对多个 servlet 加载进行排序的示例。

Web.xml

     <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
  <servlet>
      <servlet-name>abc1</servlet-name>
      <servlet-class>com.app.studytonight.AddServlet1</servlet-class>
    <load-on-startup>1</load-on-startup> 
  </servlet>
  <servlet>
      <servlet-name>abc2</servlet-name>
      <servlet-class>com.app.studytonight.AddServlet2</servlet-class>
    <load-on-startup>2</load-on-startup> 
  </servlet>
  <servlet>
      <servlet-name>abc3</servlet-name>
      <servlet-class>com.app.studytonight.AddServlet3</servlet-class>
    <load-on-startup>3</load-on-startup> 
  </servlet>
  <servlet>
      <servlet-name>abc4</servlet-name>
      <servlet-class>com.app.studytonight.AddServlet4</servlet-class>
    <load-on-startup>-1</load-on-startup> 
  </servlet>
</web-app>

在上面的示例中,一旦服务器按照指定的顺序(即 1、2 和 3)启动,就会加载 com . app . study south . addservlet 1、com . app . study south . addservlet 2、com . app . study south . addservlet 3。但是当服务器启动时,不会加载 com . app . study south . addservlet 4,因为它有一个负值。负值将根据容器首选项加载。