1. 程式人生 > 其它 >JavaWeb-03-Servlet-03-Servlet物件生命週期

JavaWeb-03-Servlet-03-Servlet物件生命週期

Servlet物件生命週期

1.Servlet物件生命週期

1.網站中所有的Servlet介面實現類的例項物件,只能由Http伺服器建立,不能由程式設計師手動去建立。

2.預設情況下,當Http伺服器接收到對於當前Servlet介面實現類的第一次請求時,會自動建立這個Servlet介面實現類的例項物件。

手動配置情況下,可以設定Http伺服器在啟動的時候就自動建立某個Servlet介面實現類的例項物件。

設定方法:在web.xml檔案中註冊Servlet介面實現類時,在後面新增一行< load-on-startup>標籤,將裡面寫入一個大於等於1的整數。

<servlet>
    <!-- 宣告一個變數,儲存Servlet介面實現類的類路徑 -->
	<servlet-name>demo01Path</servlet-name>
    <!-- Servlet介面實現類的類路徑  -->
    <servlet-class>com.tsccg.controller.ServletDemo01</servlet-class>
    <!-- 填入一個大於0的整數即可實現啟動時建立例項物件 -->
    <load-on-startup>10</load-on-startup>
</servlet>

3.Http伺服器執行期間,一個Servlet介面實現類只能被建立一個例項物件。

4.在Http伺服器關閉時刻,會自動將網站中所有的Servlet物件銷燬。

2.演示Servlet物件生命週期

2.1建立專案

新建一個專案,建立兩個Servlet介面實現類:

第一個Servlet介面實現類:

package com.tsccg.controller;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @Author: TSCCG
 * @Date: 2021/08/12 21:19
 */
public class ServletTest01 extends HttpServlet {
    public ServletTest01() {
        System.out.println("ServletTest01例項物件被建立了");
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("ServletTest01中的doPost方法被呼叫了");
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("ServletTest01中的doGet方法被呼叫了");
    }
}

第二個Servlet介面實現類:

package com.tsccg.controller;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @Author: TSCCG
 * @Date: 2021/08/12 21:21
 */
public class ServletTest02 extends HttpServlet {
    public ServletTest02() {
        System.out.println("ServletTest02例項物件被建立了");
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("ServletTest02中的doPost方法被呼叫了");
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("ServletTest02中的doGet方法被呼叫了");
    }
}

在將兩個Servlet介面實現類註冊到Tomcat伺服器時,設定第二個Servlet介面實現類為開啟伺服器時自動建立物件。

web.xml配置資訊:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         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"
         version="4.0">
    <servlet>
        <servlet-name>test01</servlet-name>
        <servlet-class>com.tsccg.controller.ServletTest01</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>test01</servlet-name>
        <url-pattern>/test01</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>test02</servlet-name>
        <servlet-class>com.tsccg.controller.ServletTest02</servlet-class>
        <!--   設定為開啟伺服器時自動建立例項物件     -->
        <load-on-startup>10</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>test02</servlet-name>
        <url-pattern>/test02</url-pattern>
    </servlet-mapping>
</web-app>

2.2開始演示

1.開啟伺服器

當開啟伺服器時,第二個Servle介面實現類自動建立例項物件

2.請求處理

通過瀏覽器向伺服器傳送訪問第一個Servlet介面實現類的請求

3.重複請求訪問同一個Servlet介面實現類

由結果可見,同一個介面實現類只能被建立一次。

4.銷燬

終止伺服器執行