Servlet生命週期與方法

QixunQiu發表於2024-11-09

一 生命週期
Servlet執行在Servlet容器(web伺服器)中,其生命週期由容器來管理,分為4個階段:

  1. 載入和例項化:預設情況下,當Servlet第一次被訪問時,由容器建立Servlet物件
    @WebServlet(urlPatterns = "/demo1",loadOnStartup = 1)
    loadOnstartup的取值有兩類情況
    (1)負整數:第一次訪問時建立Servlet物件
    (2)0或正整數:伺服器啟動時建立Servlet物件,數字越小優先順序越高
  2. 初始化:在Servlet例項化之後,容器將呼叫Servlet的init()方法初始化這個物件,完成一些如載入配置檔案、建立連線等初始化的工作。該方法只呼叫一次
  3. 請求處理:每次請求Servlet時,Servlet容器都會呼叫Servlet的service()方法對請求進行處理
  4. 服務終止:當需要釋放記憶體或者容器關閉時,容器就會呼叫Servlet例項的destroy()方法完成資源的釋放。在destroy()方法呼叫之後,容器會釋放這個Servlet例項,該例項隨後
    會被Java的垃圾收集器所回收
點選檢視程式碼
package com.QixunQiu.web;
  
  import javax.servlet.*;
  import javax.servlet.annotation.WebServlet;
  import java.io.IOException;
  /**
  * Servlet生命週期方法
  */
  @WebServlet(urlPatterns = "/demo2",loadOnStartup = 1)
  public class ServletDemo2 implements Servlet {
  
      /**
       *  初始化方法
       *  1.呼叫時機:預設情況下,Servlet被第一次訪問時,呼叫
       *      * loadOnStartup: 預設為-1,修改為0或者正整數,則會在伺服器啟動的時候,呼叫
       *  2.呼叫次數: 1次
       * @param config
       * @throws ServletException
       */
      public void init(ServletConfig config) throws ServletException {
          System.out.println("init...");
      }
  
      /**
       * 提供服務
       * 1.呼叫時機:每一次Servlet被訪問時,呼叫
       * 2.呼叫次數: 多次
       * @param req
       * @param res
       * @throws ServletException
       * @throws IOException
       */
      public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
          System.out.println("servlet hello world~");
      }
  
      /**
       * 銷燬方法
       * 1.呼叫時機:記憶體釋放或者伺服器關閉的時候,Servlet物件會被銷燬,呼叫
       * 2.呼叫次數: 1次
       */
      public void destroy() {
          System.out.println("destroy...");
      }
      public ServletConfig getServletConfig() {
          return null;
      }
  
      public String getServletInfo() {
          return null;
      }
  }
二 方法
點選檢視程式碼
* 初始化方法,在Servlet被建立時執行,只執行一次
void init(ServletConfig config) 

* 提供服務方法, 每次Servlet被訪問,都會呼叫該方法
void service(ServletRequest req, ServletResponse res)

* 銷燬方法,當Servlet被銷燬時,呼叫該方法。在記憶體釋放或伺服器關閉時銷燬Servlet
void destroy() 

* 獲取Servlet資訊
String getServletInfo() 
//該方法用來返回Servlet的相關資訊,沒有什麼太大的用處,一般我們返回一個空字串即可
public String getServletInfo() {
    return "";
}

* 獲取ServletConfig物件
ServletConfig getServletConfig()
ServletConfig物件,在init方法的引數中有,而Tomcat Web伺服器在建立Servlet物件的時候會呼叫init方法,必定會傳入一個ServletConfig物件,我們只需要將伺服器傳過來的ServletConfig進行返回即可。
具體實現
點選檢視程式碼
package com.QixunQiu.web;

import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;

/**
 * Servlet方法介紹
 */
@WebServlet(urlPatterns = "/demo3",loadOnStartup = 1)
public class ServletDemo3 implements Servlet {

    private ServletConfig servletConfig;
    /**
     *  初始化方法
     *  1.呼叫時機:預設情況下,Servlet被第一次訪問時,呼叫
     *      * loadOnStartup: 預設為-1,修改為0或者正整數,則會在伺服器啟動的時候,呼叫
     *  2.呼叫次數: 1次
     * @param config
     * @throws ServletException
     */
    public void init(ServletConfig config) throws ServletException {
        this.servletConfig = config;
        System.out.println("init...");
    }
    public ServletConfig getServletConfig() {
        return servletConfig;
    }
    
    /**
     * 提供服務
     * 1.呼叫時機:每一次Servlet被訪問時,呼叫
     * 2.呼叫次數: 多次
     * @param req
     * @param res
     * @throws ServletException
     * @throws IOException
     */
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
        System.out.println("servlet hello world~");
    }

    /**
     * 銷燬方法
     * 1.呼叫時機:記憶體釋放或者伺服器關閉的時候,Servlet物件會被銷燬,呼叫
     * 2.呼叫次數: 1次
     */
    public void destroy() {
        System.out.println("destroy...");
    }
    
    public String getServletInfo() {
        return "";
    }
}

相關文章