伺服器端組件,taobao
一、servlet
1.servlet是運行在伺服器端的一個特殊的java類,它可以用於接收頁面傳過來的資料,由java程式來處理,也可以將處理結果返回給瀏覽器,也指ServletAPI。
2.servlet的主要任務:
(1)讀取用戶端(瀏覽器)發送的顯式請求資料。包括 Html 表單。
(2)讀取由用戶端(瀏覽器)發送的隱式請求資料。包括 Cookies,媒體類型等。
(3)處理請求資料並產生結果。
(4)發送顯式資料到用戶端(瀏覽器),可以為各種格式。
(5)發送隱式資料到用戶端(瀏覽器),包括設定Cookies和緩衝。
3.servlet的生命週期:
(1)init() 方法
在第一次建立Servlet的時候會被調用。通常情況下,使用者第一次調用對應該 Servlet 的URL時,Servlet 會被建立。
但是當伺服器啟動時,你也可以指定 Servlet 被載入。
當使用者調用 servlet 的時候,每個 servlet 的執行個體就會被建立,並且每一個使用者的請求都會產生一個新的線程,在適當的時刻
交給 doGet() 或是 doPost() 方法。
(2)service() 方法
是執行實際任務的主要方法。Servlet 容器(Web 服務器)調用 service() 方法來處理來自用戶端的請求,並將格式化的響應返回到用戶端。
每次伺服器接收到一個 servlet 請求時,伺服器會產生一個新的線程並調用服務。
service() 方法由容器調用,且 service 方法在適當的時候調用 doGet、doPost、doPut、doDelete 等。
所以對 service() 方法你什麼都不需要做,只是根據你接收到的來自用戶端的請求類型來重寫 doGet() 或 doPost()。
doGet() 和 doPost() 方法在每次服務要求中是最常用的方法。下面是這兩種方法的特徵。
(3)destroy() 方法
destroy() 方法只在 servlet 生命週期結束時被調用一次。
4.讀取表單參數
getParameterNames():如果你想要得到一個當前請求的所有參數的完整列表,那麼調用該方法。
GET 方法有大小限制:請求字串中最多隻能有 1024 個字元。
二、filter
1.filter是在瀏覽器請求到達Web資源之前或Web資源給出的響應回到瀏覽器之前進行統一的攔截和過濾的伺服器端組件
2.生命週期:
(1)建立對象:在Web應用載入時執行——只執行一次:說明Filter也是單一實例多線程的方式啟動並執行
(2)初始化操作:建立對象後立即執行——只執行一次
(3)攔截瀏覽器請求:執行doFilter()對象——多次執行
(4)對象釋放前:執行清理操作——只執行一次
3.映射方式
(1)通過URL地址
精確匹配:在url-pattern標籤中指定一個具體的URL地址,其中不使用任何的萬用字元,例如:/target.jsp
模糊比對:在url-pattern標籤中指定一個帶有萬用字元的URL地址
<1>首碼匹配:URL地址前面確定,後面使用萬用字元,例如:/happy/*
<2>尾碼匹配:URL地址後面確定,前面使用萬用字元,例如:*.jsp,*.jpg
注意:不能在URL地址中間使用萬用字元,例如:/happy/*.jsp是不允許的
(2)映射Servlet
4.多個filter鏈的執行順序
按照 FilterMapping的順序執行
5.常見的使用方式
(1)使用者名稱密碼的驗證
(2)過濾不雅字元:HttpServletRequestWrapper,裝飾者模式
*在JavaWeb應用中,很多伺服器組件的對象是由伺服器容器來建立的,
具體的是,我們提供了這些伺服器組件的註冊資訊,然後容器會檢測到,進而通過反射來建立對象,這是一種依賴注入的思想,
但是這樣會產生一個問題,我們無法對他們的方法進行修改,通過繼承的方式會導致程式的遷移性差,
所以我們使用裝飾者模式來對原始的伺服器容器建立的對象進行封裝,修改它的某些方法,進而達到預期的效果。
未完,待續。