欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
Web基礎了解版10-Filter-Listener

Filter

對于WEB應用來(lái)說(shuō),過(guò)濾器是一個(gè)駐留在服務(wù)器中的WEB組件,他可以截取客戶(hù)端和WEB資源之間的請求和響應信息。

在一個(gè)WEB應用中可以部署多個(gè)過(guò)濾器,多個(gè)過(guò)濾器就組成了一個(gè)過(guò)濾器鏈,請求和響應必須在經(jīng)過(guò)多個(gè)過(guò)濾器后才能到達目標

當配置多個(gè)Filter以后就有一個(gè)執行順序的問(wèn)題,實(shí)際執行順序是按照在web.xml文件中servlet-mapping的順序決定的,如果順序越靠前越先被調用。

Filter接口

  • Filter是一個(gè)接口。

  • Filter是Java Web三大組件之一。(JavaWeb三大組件分別是:Servlet小程序、Filter過(guò)濾器、Listener監聽(tīng)器)

  • 作用:1.檢查用戶(hù)訪(fǎng)問(wèn)權限

                2.設置請求響應編碼,解決亂碼問(wèn)題

主要API

Filter

  • init(FilterConfig)方法用于初始化Filter

  • doFilter(ServletRequest,ServletResponse,FilterChain)作用和service()方法類(lèi)似,是過(guò)濾請求和響應的主要方法。

  • destroy()用于在Filter對象被銷(xiāo)毀前做一些收尾工作。如:釋放資源等。

FilterConfig

FilterConfig對象在服務(wù)器調用init()方法時(shí)傳遞進(jìn)來(lái)。

  • getFilterName() 獲取Filter的名字

  • getServletContext() 獲取ServletContext對象(即application)

  • getInitParameter(String) 獲取Filter的初始化參數

  • getInitParameterNames() 獲取所有初始化參數的名字

FilterChain

FilterChain對象是在doFilter()方法被調用時(shí)作為參數傳遞進(jìn)來(lái)的。

  • doFilter(ServletRequest,ServletResponse)方法用于調用Filter鏈上的下一個(gè)過(guò)濾器,如果當前過(guò)濾器為最后一個(gè)過(guò)濾器則將請求發(fā)送到目標資源。

web.xml文件中的Filter配置

<filter-mapping>    <!-- Filter的名字 -->    <filter-name>Filter1</filter-name>    <!-- Filter1的過(guò)濾地址,表示過(guò)濾http://127.0.0.1:8080/day17/admin/user.jsp-->    <url-pattern>/admin/user.jsp</url-pattern></filter-mapping>

 

除此之外在filter-mapping還有一個(gè)子標簽dispatcher,該標簽用來(lái)指定需要Filter處理的請求類(lèi)型

<!-- 用戶(hù)直接訪(fǎng)問(wèn)資源時(shí),會(huì )調用Filter --><dispatcher>REQUEST</dispatcher><!-- 通過(guò)轉發(fā)訪(fǎng)問(wèn)時(shí),會(huì )調用Filter --><dispatcher>FORWARD</dispatcher><!-- 通過(guò)動(dòng)態(tài)包含獲取時(shí),會(huì )調用Filter --><dispatcher>INCLUDE</dispatcher><!-- 當通過(guò)異常處理訪(fǎng)問(wèn)頁(yè)面時(shí),會(huì )調用Filter --><dispatcher>ERROR</dispatcher>

 

這四種情況可以設置一個(gè),也可以同時(shí)設置多個(gè),如果不設置那么默認為REQUEST

Filter生命周期

  1. 先執行Filter的構造方法

  2. 然后執行Filter的init()方法,對象創(chuàng )建后,馬上就被調用,對Filter做一些初始化操作

  3. 執行Filter的doFilter()方法,每次訪(fǎng)問(wèn)目標資源,只要匹配過(guò)濾的地址,就會(huì )調用。

  4. 執行Filter的destroy()方法,服務(wù)器停止時(shí)調用,用來(lái)釋放資源。

FilterConfig類(lèi)

作用:

  • 獲取Filter在web.xml文件中配置的名稱(chēng)

  • 獲取Filter在web.xml文件中配置的初始化參數

  • 通過(guò)FilterConfig類(lèi)獲取ServletContext對象實(shí)例

    // 獲取Filter的名稱(chēng)String filterName = filterConfig.getFilterName();// 獲取初始化參數。username的值String username = filterConfig.getInitParameter("username");// 獲取ServletContext的對象實(shí)例 ServletContext ctx = filterConfig.getServletContext();

     

FilterChain過(guò)濾器鏈

  • FilterChain是整個(gè)Filter過(guò)濾器的調用者。Filter與Filter之間的傳遞,或者Filter與請求資源之間的傳遞都靠FilterChain.doFilter方法。

  • 一般Filter.doFilter中的代碼分為三段:

    • 第一段是FilterChain.doFilter之前的代碼。一般用來(lái)做請求的攔截,檢查用戶(hù)訪(fǎng)問(wèn)的權限,訪(fǎng)問(wèn)日記的記錄。參數編碼的設置等等操作。

    • 第二段是FilterChain.doFilter方法。此方法可以將代碼的執行傳遞到下一個(gè)Filter中?;蛘呤莻鬟f到用戶(hù)最終訪(fǎng)問(wèn)的資源中。

    • 第三段是FilterChain.doFilter之后的代碼。主要用過(guò)做一些日志操作。我們很少會(huì )在第三段中做太多復雜的操作。

  • 在每一個(gè)Filter類(lèi)的doFilter方法中,一定要調用chain.doFilter方法,除非你想要阻止用戶(hù)繼續往下面訪(fǎng)問(wèn)。否則一定要調用FilterChain的doFilter方法。

Filter的攔截路徑

主要有以下兩種

  • 第一種:通過(guò)filter-mapping的url-pattern來(lái)配置(與Servlet的url-pattern的規則相同)

    • 精確匹配:/路徑/資源名

      比如:/index.html、/hello/index.jsp 、 /client/LoginServlet 等,只有在請求地址完全一樣時(shí)才會(huì )調用Filter

    • 目錄匹配:/路徑名/*

      比如1:/abc/* 表示可以攔截abc目錄下的所有資源,甚至是abc目錄下的其他目錄。

      比如2:/* 表示只要訪(fǎng)問(wèn)項目根目錄下的資源就會(huì )調用Filter

    • 后綴名匹配:*.后綴名

      比如:*.jsp 表示攔截所有后綴為jsp文件資源

  • 第二種:通過(guò)filter-mapping中的servlet-name來(lái)指定要過(guò)濾的Servlet

在Filter的filter-mapping中增加了一個(gè)servlet-name標簽,將該標簽的值設置成Servlet的名字,在訪(fǎng)問(wèn)Servlet時(shí)就會(huì )調用該過(guò)濾器過(guò)濾請求。
  <filter-mapping>    <filter-name>HelloFilter</filter-name>    <servlet-name>HelloServlet</servlet-name>  </filter-mapping>

 

Listener

Listener用于監聽(tīng)JavaWeb程序中的事件,當事件被觸發(fā)時(shí),監聽(tīng)器中的指定方法將會(huì )被調用。

監聽(tīng)對象的創(chuàng )建與銷(xiāo)毀

  • ServletContextListener

    • 作用:監聽(tīng)ServletContext對象的創(chuàng )建與銷(xiāo)毀

    • 方法:

      public void contextInitialized ( ServletContextEvent sce ):ServletContext創(chuàng )建時(shí)調用

      public void contextDestroyed ( ServletContextEvent sce ):ServletContext銷(xiāo)毀時(shí)調用

    • ServletContextEvent對象

      • 作用:public ServletContext getServletContext ():獲取ServletContext對象

  • HttpSessionListener

    • 作用:監聽(tīng)HttpSession對象的創(chuàng )建與銷(xiāo)毀

    • 方法:

      • public void sessionCreated ( HttpSessionEvent se ):HttpSession對象創(chuàng )建時(shí)調用

      • public void sessionDestroyed ( HttpSessionEvent se ):HttpSession對象銷(xiāo)毀時(shí)調用

    • HttpSessionEvent對象

      • 作用:public HttpSession getSession ():獲取當前HttpSession對象

  • ServletRequestListener

    • 作用:監聽(tīng)ServletRequest對象的創(chuàng )建與銷(xiāo)毀

    • 方法:

      • public void requestInitialized ( ServletRequestEvent sre ):ServletRequest對象創(chuàng )建時(shí)調用

      • public void requestDestroyed ( ServletRequestEvent sre ):ServletRequest對象銷(xiāo)毀時(shí)調用

    • ServletRequestEvent對象

      • 作用:

        public ServletRequest getServletRequest ():獲取當前的ServletRequest對象。

        public ServletContext getServletContext ():獲取當前項目的ServletContext對象。

三種創(chuàng )建與銷(xiāo)毀的監聽(tīng)器使用起來(lái)基本一致。

在web.xml文件中注冊監聽(tīng)器

<listener><listener-class>com.web.listener.MyServletContextListener</listener-class></listener>

 

監聽(tīng)對象的屬性變化

  • ServletContextAttributeListener

    • 作用:監聽(tīng)ServletContext中屬性的創(chuàng )建、修改和銷(xiāo)毀

    • 方法:

      public void attributeAdded(ServletContextAttributeEvent scab):向ServletContext中添加屬性時(shí)調用

      public void attributeRemoved(ServletContextAttributeEvent scab):從ServletContext中移除屬性時(shí)調用

      public void attributeReplaced(ServletContextAttributeEvent scab):當ServletContext中的屬性被修改時(shí)調用

    • ServletContextAttributeEvent對象

      • 作用:

        public String getName() :獲取修改或添加的屬性名

        public Object getValue():獲取被修改或添加的屬性值

        public ServletContext getServletContext ():獲取當前WEB應用的ServletContext對象

  • HttpSessionAttributeListener

    • 作用:監聽(tīng)HttpSession中屬性的創(chuàng )建、修改和銷(xiāo)毀

    • 方法:

      public void attributeAdded ( HttpSessionBindingEvent se ):向HttpSession中添加屬性時(shí)調用

      public void attributeRemoved(HttpSessionBindingEvent se):從HttpSession中移除屬性時(shí)調用

      public void attributeReplaced(HttpSessionBindingEvent se):當HttpSession中的屬性被修改時(shí)調用

    • HttpSessionBindingEvent對象

      • 作用:

        public String getName() :獲取修改或添加的屬性名

        public Object getValue():獲取被修改或添加的屬性值

        public HttpSession getSession ():獲取當前的HttpSession對象

  • ServletRequestAttributeListener

    • 作用:監聽(tīng)ServletRequest中屬性的創(chuàng )建、修改和銷(xiāo)毀

    • 方法:

      public void attributeAdded (ServletRequestAttributeEvent srae ):向ServletRequest中添加屬性時(shí)調用

      public void attributeRemoved(ServletRequestAttributeEvent srae):從ServletRequest中移除屬性時(shí)調用

      public void attributeReplaced(ServletRequestAttributeEvent srae):當ServletRequest中的屬性被修改時(shí)調用

    • ServletRequestAttributeEvent對象

      • 作用:

        public String getName():獲取修改或添加的屬性名

        public Object getValue():獲取被修改或添加的屬性值

        public ServletRequest getServletRequest () :獲取當前的ServletRequest對象

監聽(tīng)Session內的對象

  • HttpSessionBindingListener

    • 作用:監聽(tīng)某個(gè)對象在session域中的創(chuàng )建與移除。

    • 方法:

      public void valueBound(HttpSessionBindingEvent event):該類(lèi)的實(shí)例被放到Session域中時(shí)調用

      public void valueUnbound(HttpSessionBindingEvent event):該類(lèi)的實(shí)例從Session中移除時(shí)調用

    • HttpSessionBindingEvent對象

      • 作用:

        public HttpSession getSession ():獲取HttpSession對象

        public String getName():獲取操作的屬性名

        public Object getValue():獲取操作的屬性值

  • 使用:要監聽(tīng)哪一個(gè)類(lèi),直接使該類(lèi)實(shí)現HttpSessionBindingListener接口即可。

  • HttpSessionActivationListener

    • 作用:監聽(tīng)某個(gè)對象在session中的序列化與反序列化。

    • 方法:

      public void sessionWillPassivate(HttpSessionEvent se):該類(lèi)實(shí)例和Session一起鈍化到硬盤(pán)時(shí)調用

      public void sessionDidActivate(HttpSessionEvent se):該類(lèi)實(shí)例和Session一起活化到內存時(shí)調用

    • HttpSessionEvent對象

      • 作用:

        public HttpSession getSession ():獲取HttpSession對象

  • 使用:要監聽(tīng)哪一個(gè)類(lèi),直接使該類(lèi)實(shí)現HttpSessionActivationListener接口即可。

注意:為被監聽(tīng)類(lèi)對象可以正常序列化到硬盤(pán)上,還需要讓該類(lèi)實(shí)現java.io.Serializable接口

 

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Servlet過(guò)濾器和監聽(tīng)器知識總結
過(guò)濾器、監聽(tīng)器
java 解決字符集的亂碼問(wèn)題
spring boot 過(guò)濾器、攔截器的區別與使用_
過(guò)濾器 和 攔截器的 6個(gè)區別,別再傻傻分不清了
GoF設計模式之十三 Chain of Responsibility- -
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久