1. 程式人生 > 實用技巧 >java進階知識--Servlet技術

java進階知識--Servlet技術

一、初識Servlet

 1.1 概述

    Servlet就是一個用java語言編寫的介面,定義了Java類被瀏覽器訪問到的規則。
    Servlet技術是應用到web伺服器端的擴充套件技術,對http請求進行處理,主要用於處理各種業務邏輯。

    注意:1. 對http請求進行處理,實際為servlet介面的實現類HttpServlet提供了處理請求的方法
       2. Servlet的具體細節需要由Servlet容器進行實現,Servlet物件在Servlet容器啟動時被初始化。

 1.2 特點

    功能強大、可移植、效能高效、安全性高、可擴充套件性好。

 1.3 生命週期

    1. 建立:執行init方法,只執行一次
      * Servlet什麼時候被建立?
        * 預設情況下,第一次被訪問時,Servlet被建立
        * 可以配置執行Servlet的建立時機,預設下的預設值為-1。
          * 在<servlet>標籤下配置
            1. 第一次被訪問時建立
              * <load-on-startup>的值為負數
            2. 在伺服器啟動時建立
              * <load-on-startup>的值為0或正整數
              * Servlet的init方法,只執行一次,說明一個Servlet在記憶體中只存在一個物件,Servlet是單例的


        * 多個使用者同時訪問時,可能存線上程安全問題。
          * 解決:儘量不要在Servlet中定義成員變數。即使定義了成員變數,也不要對其修改值。
    2. 執行:執行service方法,執行多次
      * 每次訪問Servlet時,Service方法都會被呼叫一次。
    3. 銷燬:執行destroy方法,只執行一次
      * Servlet被銷燬時執行。伺服器關閉時,Servlet被銷燬。
      * destroy方法在Servlet被銷燬之前執行,一般用於釋放資源。
      * 只有伺服器正常關閉時,才會執行destroy方法。

  1.4Servlet的體系結構

        Servlet -- 介面
          |
        GenericServlet -- 抽象類
          |
        HttpServlet -- 抽象類                  * GenericServlet:將Servlet介面中其他的方法做了預設空實現,只將service()方法作為抽象
          * 將來定義Servlet類時,可以繼承GenericServlet,實現service()方法即可
        * HttpServlet:對http協議的一種封裝,簡化操作:
          1. 定義類繼承HttpServlet
          2. 複寫doGet/doPost方法

二、Servlet配置

 2.1web.xml配置

    在web.xml中配置,以告知web容器哪一個請求呼叫哪一個Servlet物件處理,對Servlet起到一個註冊的作用。

// 宣告Servlet物件
<servlet>
	<servlet-name>WfxServlet</servlet-name>						--Servlet名稱
	<servlet-class>com.wfx.WfxServlet</servlet-class>			--Servlet物件的完整位置
</servlet>
// 對映Servlet
<servlet-mapping>
	<servlet-name>WfxServlet</servlet-name>						--Servlet名稱
	<url-pattern>/WfxServlet</url-pattern>						--對映訪問URL
</servlet-mapping>

    執行原理:

      1. 當伺服器接收到客戶端瀏覽器的請求後,會解析請求URL路徑,獲取訪問的Servlet的資源路徑;
      2. 查詢web.xml檔案,是否有對應的<url-pattern>標籤體內容與資源路徑一致;
      3. 如果有,則在找到對應的<servlet-class>全類名;
      4. tomcat會將位元組碼檔案載入進記憶體,並且建立其物件;
      5. 呼叫其方法。如:service()方法。

 2.2Servlet3.0 註解配置

 小貼士:

  Servlet3.0新特性
    ①支援註解配置。新增註解@WebServlet、@WebFilter、@WebListener、@WebInitParam等,通過使用註釋就無需在web.xml檔案中對Servlet、過濾器或者監聽器等進行配置。
    ②對檔案上傳的支援。檔案上傳需兩步:a.新增@MultipartConfig註釋。b.從request物件中獲取Part檔案物件。
    ③非同步處理:Servlet執行緒將請求交給一個非同步執行緒來執行業務處理,執行緒本身返回至容器,非同步執行緒處理完業務後,可以直接生成響應資料,或者將請求繼續轉發給其他Servlet。
      (這樣,Servlet執行緒不再是一直處於阻塞狀態以等待業務邏輯的處理,而是啟動非同步之後可以立即返回。)
  非同步處理機制可以應用於Servlet和過濾器兩種元件,那麼如何開啟非同步處理特性?(預設情況下為關閉非同步處理)
    ==》方法一(配置檔案):<async-supported>true</async-supported>
    ==》方法二(註解):@WfxServlet和@WfxFilter註釋提供了asyncSupported屬性,預設情況下為false,將其設定成true即可。