1. 程式人生 > 實用技巧 >Servlet基礎/概念

Servlet基礎/概念

Servlet原理

概念:是一個Java類,沒有主方法,執行在伺服器端的小程式,由Tomcat執行。

本質:是一個介面,定義了Java類被伺服器識別的規則。我們需要自定義類,實現Servlet介面,重寫方法。

快速入門(實現一個Servlet類):

  1. 建立JavaEE模組;

  2. 定義一個類,實現Servlet介面,重寫方法

  3. 配置Servlet,在WEB-INF中的web.xml檔案中

    注意,放在<web-app>標籤內

    <!--配置servlet-->
    <!--給servlet起一個名-->
    <servlet>
        <servlet-name>demo1</servlet-name>
        <servlet-class>baidu.servlet.ServletDemo1</servlet-class>
    </servlet>
    <!--servlet的對映路徑-->
    <servlet-mapping>
        <servlet-name>demo1</servlet-name>
        <url-pattern>/demo1</url-pattern>
    </servlet-mapping>
    

Tomcat執行原理(Tomcat要訪問Servlet的實現類,用到反射機制):

  1. 伺服器收到客戶端的請求,解析URL,獲取訪問Servlet的資源路徑;
  2. 查詢web.xml檔案,找到對應的全類名;
  3. 將全類名對應的位元組碼檔案載入進記憶體,並建立其物件;
  4. 呼叫其中的方法。

Servlet方法

五個方法:

  1. void init() 初始化方法,伺服器開啟時執行,載入資源
  2. void destroy() 銷燬方法,伺服器正常關閉時執行,釋放資源
  3. void service() 提供服務方法,每次都執行
  4. ServletConfig getServletConfig() 獲取ServletConfig物件
  5. String getServletInfo() 獲取Servlet資訊,一般不用。

Servlet生命週期

  1. 被建立:執行init方法,只執行一次
  2. 被銷燬:執行destroy方法,只執行一次
  3. 提供服務:執行service方法,執行多次

init()

  1. 執行時刻:(可以在web.xml中的servlet標籤下配置)

    • 啟動伺服器時建立(預設):

      <load-on-startup>0或正數<load-on-startup>

    • 第一次訪問時建立:

      <load-on-startup>負數<load-on-startup>

  2. 多個使用者訪問時,可能存線上程安全問題:

    • 解決方法:儘量不要定義成員變數 或修改

Servlet3.0

好處:

  1. 支援註解配置,可以不用web.xml

步驟:

  1. 建立JavaEE專案,選擇Servlet的版本在3.0以上,不用選web.xml檔案。
  2. 定義一個類,實現servlet介面,重寫方法
  3. 在類上使用@WebServlet("/demo")註解,其中/demo表示資源路徑名

注意:

  1. 一個servlet可以定義多個訪問路徑:@WebServlet({"/demo1", "/demo2"})
  2. 兩層路徑:@WebServlet("/demo/*"),其中星號表示所有字串都可以

IDEA與Tomcat專案

  1. IDEA會為每一個web專案單獨建立一份配置檔案:
    • 具體位置:檢視控制檯的log:Using CATALINA_BASE: "C:\Users\..."
    • IDEA在run->edit config->tomcat的Deployment介面可實現配置
  2. IDEA的專案工作空間 Tomcat部署的web專案 分離:
    • Tomcat訪問 Tomcat部署的web專案
    • Tomcat部署的web專案 (在專案out資料夾內)對應著 專案工作空間的web目錄下所有資源
    • WEB-INF目錄下的資源不能被瀏覽器直接訪問。

Servlet體系結構

servlet介面的實現類:

  1. GenericServlet:只需要重寫service方法,其他方法已經預設空實現。
  2. HttpServlet:對http協議的封裝,簡化操作:(推薦使用)
    • 定義類繼承HttpServlet
    • 重寫doGet/doPost方法

原因:

servlet中的service方法是為了處理http請求,第一步就要判斷http請求是那種協議:

get/post等一共7中,所以,我們要在HttpServlet繼承類中重寫常用的doGet/doPost方法。