天天看點

Servlet的細節1|學習筆記Servlet的細節1

開發者學堂課程【Servlet入門:Servlet的細節1】學習筆記,與課程緊密聯系,讓使用者快速學習知識。

課程位址: https://developer.aliyun.com/learning/course/34

Servlet的細節1

一、 Servlet與線程安全

二、 讓伺服器在啟動時就建立 Servlet

三、 <url-pattern>

1. Servlet與線程安全

    因為一個類型的 Servlet隻有一個執行個體對象,那麼就有可能會現時出一個Servlet同時處理多個請求,那麼Servlet是否為線程安全的呢?答案是:“不是線程安全的”。這說明 Servlet的工作效率很高,但也存線上程安全問題!

解決辦法:

1) 不要在Servlet中建立成員,建立局部變量即可。

Servlet的細節1|學習筆記Servlet的細節1

2) 可以建立無狀态成員。

Servlet的細節1|學習筆記Servlet的細節1

3) 可以建立有狀态的成員,但狀态必須為隻讀的。

是以我們不應該在 servlet 中便宜建立成員變量,因為可能會存在一個線程對這個成員變量進行寫操作,另一個線程對這個成員變量進行讀操作。

2. 讓伺服器在啟動時就建立 Servlet

    預設情況下,伺服器會在某個Servlet第一次收到請求時建立它。也可以在 web.xml 中對 Servlet進行配置,使伺服器啟動時就建立Servlet。

Servlet的細節1|學習筆記Servlet的細節1

3.  <url-pattern>

是的子元素,用來指定 Servlet的通路路徑,即 URL。它必須是以“/”開頭!

1) 可以在中給出多個,例如:

Servlet的細節1|學習筆記Servlet的細節1

那麼這說明一個 Servlet綁定了兩個 URL,無論通路/AServlet還是/BSerMet,通路的都是AServlet。

1) 還可以在中使用通配符,所謂通配符就是星号“*”,星号可以比對任何 URL字首或字尾,使用通配符可以命名一個 Servlet綁定一組 URL,例如:

a) /servlet/*:/servlet/a、/servlet/b,都比對/servlet/*;

b) *.do:/abc/def/ghi.do、/a.do,都比對".do;

c) /*:比對所有URL;

Servlet的細節1|學習筆記Servlet的細節1

請注意,通配符要麼為字首,要麼為字尾,不能出現在URL中間位置,也不能隻有通配符。例如:/*.do 就是錯誤的,因為星号出現在 URL 的中間位置上了。*.*也是不對的,因為一個 URL 中最多隻能出現一個通配符。

繼續閱讀