菜鳥學JavaWeb之——Filter(過濾器)、Ajax

十、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)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章