Servlet 簡介和快速入門

Servlet 基本介紹



1. 基本概念

  Servlet 是由 server applet 兩個單詞拼接而成,指的是運行在服務器端的小程序,它本質上是一個接口,它定義了 Java 類被瀏覽器訪問到(被tomcat識別到)的規則。使用時需要我們自定義一個類來實現 Servlet 接口,並複寫其中的方法。

這裏提供幾個關於 Servlet 的學習資料或平臺:



2. 快速入門

  我這裏演示的開發環境是 IDEA_2019.2.3 和 Tomcat_9.0.26,關於 IDEA 配置 Tomcat 的方法,推薦一篇博文 IDEA 配置 Tomcat ,講的相對詳細。

  1. 創建 JavaWeb 項目(Web Application)。

  2. 定義一個類,實現 Servlet 接口,複寫其中方法。

package servlet.demo1;

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

public class ServletDemo implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
		System.out.println("項目啓動了!");
	}
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("hello servlet!");
    }
    @Override
    public String getServletInfo() {
        return null;
    }
    @Override
    public void destroy() {
		System.out.println("項目關閉了!");
    }
}
  1. 在 web.xml 中配置 Servlet 的資源路徑,後面會介紹註解配置,這裏作爲了解。
<!-- 在web.xml中配置 -->
<!--    配置servlet-->
    <servlet>
        <!-- 這裏給模塊命名,與後面的mapping相對應 -->
        <servlet-name>demo1</servlet-name>
        <!-- 這裏寫全類名 -->
        <servlet-class>com.base.servlet.ServletDemo1</servlet-class>
    </servlet>
	<!--配置路徑-->
    <servlet-mapping>
        <!-- 這裏的 name 屬性與上面對應 -->
        <servlet-name>demo1</servlet-name>
        <!-- 這裏是瀏覽器訪問資源的 資源路徑 -->
        <url-pattern>/demo1</url-pattern>
    </servlet-mapping>
  1. 配置 Tomcat 的虛擬路徑

在這裏插入圖片描述
在這裏插入圖片描述

  1. 啓動Tomcat,到瀏覽器訪問鏈接:http://localhost:8080/Serv/demo1

在這裏插入圖片描述
在這裏插入圖片描述

  1. 查看看控制檯輸出

在這裏插入圖片描述



3. Servlet 執行原理

  1. 當服務器接收到客戶端瀏覽器的請求後,會解析請求URL路徑,獲取訪問 Servlet 的 資源路徑
  2. 服務器根據獲取到的 資源路徑 去查找 web.xml 文件中的 <url-pattern> 標籤是否有對應的 資源路徑
  3. 如果有,則找到對應的 <servlet-class> 全類名。
  4. Tomcat 將對應類的字節碼文件加載進內存,創建其對象,並調用 service() 方法。


4. Servlet 中的方法

方法名 描述
init() 初始化方法,在 Servlet 對象被創建時被調用,並且只會調用一次。
getServletConfig() 獲取 ServletConfig 對象,這是 Servlet 的配置對象。
service() 提供服務方法,每次 Servlet 被訪問時,都會被調用。
getServletInfo() 獲取 Servlet 的一些信息,如:版本、作者等信息。
destroy() 銷燬方法,在服務器正常關閉時被調用,並且只會執行一次。

關於init()方法:

  • 默認情況下,Servlet 第一次被訪問時纔會去創建對象。
  • 通過配置可以改變 Servlet 對象的創建時機。具體操作如下:
<!-- 在<servlet>標籤下配置 -->
<!-- 第一次被訪問時創建對象,則設置值爲任意的 負數 即可。 -->
<load-on-startup>-5</load-on-startup>
<!-- 在服務器啓動時創建對象,則設置值爲任意 正數 或 0 即可。-->
<load-on-startup>5</load-on-startup>
-->


5. Servlet 的生命週期

Servlet 中的 init()、service()、destroy() 三個方法可以代表 Servlet 的生命週期。

  • 被創建:調用 init() 方法,對象被創建後會調用一次。
  • 提供服務:執行service()方法,對象每次被訪問都會執行。
  • 被銷燬:執行destroy()方法,服務器正常關閉前會被調用一次。

注意:

  Servlet是單例的,多個用戶同時訪問時,可能存在安全問題,所以儘量不在 Servlet 中定義成員變量,可以定義常量用 final 修飾。



6. Servlet 的註解配置

  Servlet3.0 後的新特性,可以通過註解的方式配置 Servlet ,不用在 web.xml 中配置。

  配置方法:在類上使用@WebServlet("/資源路徑")註解,如下所示:

//@WebServlet(urlPatterns = "/demo2")
//value屬性可以省略屬性名
@WebServlet("/demo2")
public class ServletDemo implements Servlet {
    //類方法......
}

注意:

  • urlPatterns 是 Servlet 的資源訪問路徑。
  • 一個 Servlet 可以有多個資源訪問路徑:@WebServlet({"/demo1","/demo2","/demo3"})。
  • 路徑定義規則
    • /XXX —— 一層路徑
    • /XXX/XXX —— 多層路徑
    • *.後綴名 —— *代表任意字符,只要訪問資源路徑的後綴名是提前設定的字符,就可以訪問成功。

7. IDEA 與 Tomcat 的相關細節

  1. IDEA 會爲每一個Tomcat 部署的項目單獨創建一份配置文件,存儲路徑會在啓動或關閉項目時輸出到控制檯上,如下圖所示。

在這裏插入圖片描述

  1. 工作空間項目 和 Tomcat部署的 web項目
    • 工作空間:項目文件夾
    • Tomcat部署的web項目:項目文件夾\out\artifacts\項目名\
    • Tomcat真正訪問的是“Tomcat部署的web項目”
    • “Tomcat部署的web項目”對應着“工作空間項目”的web目錄下的所有資源。
    • WEB-INFO目錄下的資源不能被瀏覽器直接訪問。


8. Servlet 的體系結構

名稱 類型 描述
Servlet 接口 上面已經介紹過了。
GenericServlet 抽象類 繼承Servlet,將Servlet接口中其他的方法做了默認空實現,只將Service做抽象。
HttpServlet 抽象類 繼承GenericServlet,是對http協議的一種封裝,簡化操作。

注意:

  • 用的較多的是 HttpServlet 接口。
  • 其中具體的方法,這裏不做介紹了,具體查看文章開頭提供的 API 文檔。
  • 實現 HTTPServlet 的類需要重寫 doGet() 和 doPost() 方法。


2019年11月1日19:43:11


發佈了79 篇原創文章 · 獲贊 43 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章