十、Filter 過濾器
引入
什麼是過濾器?舉個例子:我(請求)從我家(瀏覽器)要去女朋友家(資源){女朋友家住在山裏,大山就相當於服務器,大山裏有很多資源(有很多女朋友🙄)},途中我遇到了一個土匪(過濾器)搶掉了我的盤纏之後放我通過。我到了女朋友家待了幾天後要原路回家,還會遇到這個土匪,他在把我敲詐一次才放我通行回家。
web中的過濾器:當訪問服務器的資源時,過濾器可以將請求攔截下來,完成一些特殊的功能。
處理業務的功能交給Servlet完成,能否處理的動作交給Filter
過濾器的作用:一個請求被髮到服務端先進入攔截器,看有沒有攔截器要攔截這個請求,如果有。則攔截器攔截後在往下一級發這個請求(被攔截的請求會被直接返回去)直到發到Servlet。 一般用於登錄驗證、統一編碼處理、敏感字符過濾。
Filter一定是在項目一啓動時就被加載的,然後纔是Servlet
步驟
-
定義一個類,實現接口Filter
-
覆寫方法
-
配置攔截路徑
-
方式一:web.xml
-
方式二:註解
放行操作:
filterChain.doFilter(servletRequest,servletResponse);
-
10.1 過濾器細節
10.1.1 web.xml配置
<filter>
<filter-name>demo1</filter-name>
<filter-class>com.home.java.controller.filter.FilterDemo1</filter-class>
</filter>
<filter-mapping>
<filter-name>demo1</filter-name>
<url-pattern>/*</url-pattern> <!--攔截路徑-->
</filter-mapping>
10.1.2 過濾器執行流程
- 執行過濾器
- 執行放行後的資源
- 回來執行過濾器放行代碼下邊的代碼
10.1.3 過濾器生命週期方法
- init:在服務器啓動後,會創建Filter對象,然後調用init方法。只執行一次,一般用於加載資源
- doFilter:每一次請求被攔截資源時會執行。執行多次
- destroy:在服務器關閉後,Filter對象被銷燬。如果服務器是正常關閉,則會執行destroy方法。只執行一次,一般用於釋放資源。
10.1.4 過濾器配置詳解
攔截路徑配置
- 具體資源路徑(用的少):/index.jsp 只有訪問index.jsp資源時,過濾器纔會被執行
- 攔截目錄:/user/* 訪問/user下的所有資源時,過濾器都會被執行
- 後綴名攔截:*.jsp 訪問所有後綴名爲jsp資源時,過濾器都會被執行
- 攔截所有資源:/* 訪問所有資源時,過濾器都會被執行
攔截方式配置:資源被訪問的方式
-
註解配置
設置dispatcherTypes屬性
-
REQUEST:默認值。瀏覽器直接請求資源
-
FORWARD:轉發訪問資源。(配置爲FORWARD以後,只有轉發訪問到資源才能被過濾器攔截)
eg:
@WebFilter(value="/index.jsp",dispatcherTypes = {DispatcherType.FORWARD, DispatcherType.REQUEST})
表示轉發訪問index.jsp或者瀏覽器直接訪問index.jsp都會執行過濾器
-
-
web.xml配置
設置標籤即可
10.1.5 過濾器鏈(配置多個過濾器)
執行順序:如果有兩個過濾器:過濾器1和過濾器2
- 過濾器1 —>過濾器2 —> 資源執行—> 過濾器2—>過濾器1
過濾器先後順序問題:
-
註解配置:按照類名的字符串比較規則比較,值小的先執行(依次比較字符,按字典順序)
如:AFilter 和 BFilter,AFilter 就先執行了
-
web.xml配置:誰定義在上面誰就先執行
十一、AJAX
概念:ASynchronous JavaScript And XML 異步的JavaScript 和 XML
異步和同步:客戶端和服務器端相互通信的基礎上
- 客戶端必須等待服務器端的響應。在等待的期間客戶端不能做其他操作
- 客戶端不需要等待服務器端的響應。在服務器處理請求的過程中,客戶端可以進行其他的操作
Ajax 是一種在無需重新加載整個網頁的情況下,能夠更新部分網頁的技術。通過在後臺與服務器進行少量數據交換,Ajax 可以使網頁實現異步更新。這意味着可以在不重新加載整個網頁的情況下,對網頁的某部分進行更新。傳統的網頁(不使用 Ajax)如果需要更新內容,必須重載整個網頁頁面。
Form表單是一個同步的過程,當form表單提交的時候,頁面是一定要切換的。同時,頁面當中正在執行的某些動作會立刻停止。 當發送的請求是異步的時候,他不會影響當前界面的跳轉過程
實現方式:
-
JQuery實現方式
-
$.ajax()
語法:
$.ajax({鍵值對})
//使用$.ajax()發送異步請求 $.ajax({ url:"ajaxServlet1", //請求路徑 type:"post", //請求方式 // data:"username=jack & age=23", //請求參數 data:{"username":"jack","age":23}, //請求參數 success:function (data) { //這個data接收服務器給的響應的結果的值 alert(data) }, //響應成功後的回調函數 error:function () { alert("出錯啦...") }, dataType:"text" //設置接收到的響應數據的格式 });
-
$.get():發送get請求
語法:
$.get(url,[data],[callback],[type])
參數:
-
url:請求路徑
-
data:請求參數
-
callback:回調函數
-
type:響應結果的類型
$.get("ajaxServlet",{username:"rose"},function (data) { alert(data); },"text");
-
-
$.post():發送post請求(同get)
-