一、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應用中,很多服務器組件的對象是由服務器容器來創建的,
具體的是,我們提供了這些服務器組件的注冊信息,然後容器會檢測到,進而通過反射來創建對象,這是一種依賴注入的思想,
但是這樣會產生一個問題,我們無法對他們的方法進行修改,通過繼承的方式會導致程序的遷移性差,
所以我們使用裝飾者模式來對原始的服務器容器創建的對象進行包裝,修改它的某些方法,進而達到預期的效果。
未完,待續。