Servlet中的過濾器和監聽器


過濾器

  1、什么是過濾器?

    Servlet規范中定義的一種特殊的組件,用來攔截容器的調用過程。容器收到請求之后,首先調用過濾器,然后再調用Servlet

  2、過濾器的執行流程:  流程圖中可以看出 過濾器和Servlet共享同一個request和response對象

    單個過濾器的執行流程:

           

    多個過濾器的執行流程:

      

  3、過濾器的優先級

    一個Web應用中,可以有多個過濾器,它們的優先級由位於web.xml文件中的聲明順序決定,具體是按照<filter-mapping>的順序來決定的。如下代碼所示,filter1和filter2都已經注冊,執行順序是filter2 ,filter1 。

          <filter>
              <filter-name>filter1</filter-name>
              <filter-class></filter-class>
          </filter>
          <filter>
              <filter-name>filter2</filter-name>
              <filter-class></filter-class>
          </filter>
          <filter-mapping>
              <filter-name>filter2</filter-name>
              <url-pattern>/comment2</url-pattern>
          </filter-mapping>
          <filter-mapping>
              <filter-name>filter1</filter-name>
              <url-pattern>/comment1</url-pattern>
          </filter-mapping>
 
 
  4、過濾器的生命周期:

      fiter:init()---啟動服務
      servlet:init()
      fiter:service()---請求
      servlet:service()
      servlet:destroy() 
      fiter:destroy()---關閉服務

 

  5、如何編寫過濾器?

      a 實現Filter接口,並覆蓋三個方法(destroy,init,doFilter),過濾邏輯在doFilter方法中實現

      b 容器啟動之后會立即創建過濾器實例(只會創建一個),接下來會調用init方法(只執行一次)

          FilterConfig:可以用來讀取初始化參數

      c 容器會調用doFilter方法來處理請求

          FilterChain(過濾器鏈):如果調用了該對象的doFilter方法則請求繼續向后執行,否則中斷請求不再向后執行

      d 容器在銷毀過濾器實例之前會調用destroy方法(只執行一次)

 

    web.xml中注冊過濾器       

      <!-- 過濾器 -->
        <filter>
              <filter-name>filter1</filter-name>
              <filter-class>web.CommentFilter</filter-class>
        </filter>
        <filter-mapping>
              <filter-name>filter1</filter-name>
              <url-pattern>/comment</url-pattern>
        </filter-mapping>

    

    

 

 

 

監聽器

  1、什么是監聽器?

      servlet規范中定義的一種特殊的組件,用來監聽容器產生的事件並進行相應的處理。容器會為每個監聽器只創建一個實例。

        容器一般會產生什么事件?

        綁定數據相關事件  

          容器調用了session,request,servletContext的setAttribute,removeAttribute產生的事件

        生命周期相關事件

          容器創建銷毀session,request,servletContext等。

  2、監聽器相關概念:

    事件源:被監聽的對象。 三個域對象 request  session  servletContext

    監聽器:監聽事件源對象  事件源對象的狀態的變化都會觸發監聽器

  3、 監聽器的分類:

      第一維度:

          按照被監聽的對象分:ServletRequest域   HttpSession域   ServletContext域

      第二維度:

          按照監聽的內容分: 監聽域對象的創建與銷毀的    監聽域對象的屬性變化的

    總結如圖:

              

      ServletContextListener監聽器的主要作用:

         1 初始化的工作:初始化對象 初始化數據 ---- 加載數據庫驅動  連接池的初始化

         2 加載一些初始化的配置文件 --- spring的配置文件

         3 任務調度:定時器----Timer/TimerTask

 

   4、如何編寫監聽器呢?

    a)編寫一個監聽器類去實現監聽器接口

    b)覆蓋監聽器的方法

    c)需要在web.xml中進行配置---注冊

 

  5、三種監聽域的生命周期

      ServletRequest        

        何時創建:每一次請求都會創建request

        何時銷毀:請求結束

      HttpSession   

        何時創建:第一次調用request.getSession時創建

        何時銷毀:服務器關閉銷毀  session過期  手動銷毀

      ServletContext    

        何時創建:服務器啟動創建

        何時銷毀:服務器關閉銷毀

          

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM