<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 19, comments - 53, trackbacks - 0, articles - 283
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    過濾器基本概念:

    過濾器能夠?qū)δ繕?biāo)資源的請(qǐng)求和響應(yīng)進(jìn)行截取,在過濾器中對(duì)用戶請(qǐng)求進(jìn)行統(tǒng)一處理。

     過濾器是一個(gè)程序,它先于與之相關(guān)的servlet或JSP頁面運(yùn)行在服務(wù)器上。過濾器可附加到一個(gè)或多個(gè)servlet或JSP頁面上,并且可以檢查

    進(jìn)入這些資源的請(qǐng)求信息。過濾器是雙向的,容器接受到一個(gè)對(duì)資源的請(qǐng)求時(shí),它將判斷是否有過濾器與這個(gè)資源相關(guān)聯(lián)。如果有,那么容器將

    把請(qǐng)求交給過濾器進(jìn)行處理。在過濾器中,你可以改變請(qǐng)求的內(nèi)容,或者重新設(shè)置請(qǐng)求的報(bào)頭信息,然后再將請(qǐng)求發(fā)送給目標(biāo)資源。當(dāng)目標(biāo)資源

    對(duì)請(qǐng)求作出響應(yīng)時(shí)候,容器同樣會(huì)將響應(yīng)先轉(zhuǎn)發(fā)給過濾器,再過濾器中,你可以對(duì)響應(yīng)的內(nèi)容進(jìn)行轉(zhuǎn)換,然后再將響應(yīng)發(fā)送到客戶端


    過濾器的構(gòu)造的全面解析:

    任何一個(gè)過濾器,都要實(shí)現(xiàn)Filter接口,重寫init,doFilter,destory方法。

    public void init(FilterConfig config) throws ServletException {}

    init會(huì)在容器初始化時(shí)被調(diào)用

    init方法只會(huì)在該Filter第一次被調(diào)用時(shí)初始化。對(duì)于簡(jiǎn)單的過濾器,可提供此方法的一個(gè)空體,但有兩個(gè)原因需要使用init。首先,F(xiàn)ilterConfig對(duì)象提

    供對(duì)servlet環(huán)境及web.xml文件中指派的過濾器名的訪問。因此,普遍的辦法是利用init將FilterConfig對(duì)象存放在一個(gè)字段中,以便doFilter方法能夠訪

    問servlet環(huán)境或過濾器名。其次,F(xiàn)ilterConfig對(duì)象具有一個(gè)getInitParameter方法,它能夠訪問部署描述符文件(web.xml)中分配的過濾器初始化參

    數(shù)。

    FilterConfig接口:

    javax.servlet.FilterConfig接口類似于javax.servlet.ServletConfig接口,用于在過濾器初始化時(shí),向其傳遞信息。ilterConfig

    接口有容器實(shí)現(xiàn),容器將其作為參數(shù)傳入過濾器對(duì)象的init()方法中。在FilterConfig接口,定義了4個(gè)方法:

    ·public java.lang.String getFilterName()

    得到描述符中指定的過濾器的名字。
     

    ·public java.lang.String getInitParameter(java.lang.String name)

      返回在部署描述中指定的名字為name的初始化參數(shù)的值。如果不存在返回null.
     

    ·public java.util.Enumeration getInitParameterNames()

      返回過濾器的所有初始化參數(shù)的名字的枚舉集合。
     

    ·public ServletContext getServletContext()

      返回Servlet上下文對(duì)象的引用。


    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {}

    1.ServletRequest對(duì)象,此對(duì)象給過濾器提供了對(duì)進(jìn)入的信息(包括表單數(shù)據(jù)、cookie和HTTP請(qǐng)求頭)的完全訪問,多數(shù)情況下,需要將

    ServletRequest對(duì)象構(gòu)造成HttpServletRequest對(duì)象。

    2.ServletResponse對(duì)象,簡(jiǎn)單過濾器則忽略該對(duì)象。

    3.FilterChain對(duì)象,在調(diào)用此對(duì)象的doFilter方法時(shí),激活下一個(gè)相關(guān)的過濾器。如果沒有另一個(gè)過濾器與servlet或JSP頁面關(guān)聯(lián),則servlet或JSP頁面被

    激活。

    對(duì)于doFilter方法,是每次請(qǐng)求與此過濾器相關(guān)的servlet或JSP頁面都會(huì)調(diào)用的方法。除了在兩個(gè)情形下要使用它以外,通常忽略這個(gè)參數(shù)。首先,如

    果希望完全阻塞對(duì)相關(guān)servlet或JSP頁面的訪問。可調(diào)用response.getWriter并直接發(fā)送一個(gè)響應(yīng)到客戶機(jī)。其次,如果希望修改相關(guān)的servlet或JSP頁

    面的輸出,可把響應(yīng)包含在一個(gè)收集所有發(fā)送到它的輸出的對(duì)象中。然后,在調(diào)用serlvet或JSP頁面后,過濾器可檢查輸出,如果合適就修改它,

    之后發(fā)送到客戶機(jī)。

    public void destroy() {}

    此方法在利用一個(gè)給定的過濾器對(duì)象永久地終止服務(wù)器(如關(guān)閉服務(wù)器)時(shí)調(diào)用。大多數(shù)過濾器簡(jiǎn)單地為此方法提供一個(gè)空體,不過,可利用它

    來完成諸如關(guān)閉過濾器使用的文件或數(shù)據(jù)庫連接池等清除任務(wù)。

    說說FilterChain對(duì)象的doFilter方法,F(xiàn)ilter接口的doFilter方法以一個(gè)FilterChain對(duì)象作為它的第三個(gè)參數(shù)。在調(diào)用該對(duì)象的doFilter方法時(shí),激活下一個(gè)

    相關(guān)的過濾器。這個(gè)過程一般持續(xù)到鏈中最后一個(gè)過濾器為止。在最后一個(gè)過濾器調(diào)用其FilterChain對(duì)象的doFilter方法時(shí),激活servlet或頁面自身。

    但是,鏈中的任意過濾器都可以通過不調(diào)用其FilterChain的doFilter方法中斷這個(gè)過程。在這樣的情況下,不再調(diào)用JSP頁面的serlvet,并且中斷此調(diào)

    用過程的過濾器負(fù)責(zé)將輸出提供給客戶機(jī)。

    web.xml中對(duì)Filter的標(biāo)準(zhǔn)配置

        <filter>
            
    <filter-name>EncodingUTF8</filter-name>
            
    <filter-class>yixun.wap.filter.SetCharacterEncodingFilter</filter-class>
            
    <init-param>
                
    <param-name>encoding</param-name>
                
    <param-value>UTF-8</param-value>
            
    </init-param>    
        
    </filter>
        
    <filter-mapping>
            
    <filter-name>EncodingUTF8</filter-name>
            
    <url-pattern>*.jsp</url-pattern>    
            
    <dispatcher>REQUEST</dispatcher>    
        
    </filter-mapping>


    注:
    默認(rèn)情況下,過濾器是按照配置文件中添加的順序應(yīng)用于收到的數(shù)據(jù)。

    激活器servlet

    要傳遞參數(shù)的時(shí)候最好使用form進(jìn)行傳參,如果使用鏈接的話當(dāng)中文字符的時(shí)候過濾器轉(zhuǎn)碼是不會(huì)起作用的,還有就是頁面上form的method也要設(shè)

    置為post,不然過濾器也起不了作用。

    過濾器的工作方式:

    一:request過濾器
    請(qǐng)求直接從客戶端發(fā)過來
    通過在<dispatcher>元素中指定值REQUEST,或者不寫任何<dispatcher>元素的方式指定

    二:forward過濾器
    web組件使用forward()調(diào)用匹配<url-pattern><servlet-name>
    這通過在<dispatcher>元素中設(shè)定值FORWARD指定

    三:include過濾器
    web組件使用include()調(diào)用匹配<url-pattern><servlet-name>
    這通過在<dispatcher>元素中設(shè)置值INCLUDE指定

    四:error過濾器
    請(qǐng)求使用在“錯(cuò)誤處理”中描述的錯(cuò)誤機(jī)制進(jìn)行處理,讓錯(cuò)誤資源匹配<url-pattern>。這通過在<dispatcher>元素中設(shè)置值ERROR指定

        <filter>
            
    <filter-name>ErrorPage</filter-name>
            
    <filter-class>yixun.wap.filter.ErrorPageFilter</filter-class>
        
    </filter>
        
    <filter-mapping>
            
    <filter-name>ErrorPage</filter-name>
            
    <url-pattern>/error.jsp</url-pattern>
            
    <dispatcher>ERROR</dispatcher>
        
    </filter-mapping>
        
    <error-page>
            
    <exception-type>NullPointerException</exception-type>
            
    <location>/error.jsp</location>
        
    </error-page>

        
    <error-page>
            
    <error-code>500</error-code>
            
    <location>/error.jsp</location>
        
    </error-page>

    對(duì)于上面配置,當(dāng)出現(xiàn)空指針,或空指針時(shí),就會(huì)跳轉(zhuǎn)到error.jsp頁面,在訪問error.jsp頁面前,由于對(duì)error.jsp進(jìn)行了過濾,先執(zhí)行ErrorPageFilter,然后轉(zhuǎn)向error.jsp

    如果我們實(shí)際訪問時(shí),如果這個(gè)頁面中有response.sendError(500,"出錯(cuò)了!"),或者手動(dòng)拋出空指針時(shí),;那么該錯(cuò)誤頁面仍然會(huì)被調(diào)用,過濾器也會(huì)工作。

    過濾器的實(shí)踐:

    一:統(tǒng)一過濾HTTP請(qǐng)求(響應(yīng))頭(如:使瀏覽器不緩存頁面的過濾器  )

    二、權(quán)限控制(對(duì)不同角色在系統(tǒng)中跳轉(zhuǎn)進(jìn)行檢查控制)

    三、字符編碼的過濾器 (對(duì)post數(shù)據(jù)起效)

    四、資源保護(hù)過濾器 (檢測(cè)用戶是否登陸的過濾器 )  

    五、阻塞請(qǐng)求


    參考文獻(xiàn):http://www.vipcn.com/wangluobiancheng/JSP/servletheJSPguoluqiFilter.html 

    主站蜘蛛池模板: 久99久无码精品视频免费播放| 美女被暴羞羞免费视频| 亚洲a视频在线观看| 亚洲精品第一国产综合野| 亚洲国产午夜精品理论片在线播放| 在线视频亚洲一区| 亚洲精品视频免费| 免费国产污网站在线观看15| 我们的2018在线观看免费高清| 大陆一级毛片免费视频观看i| 亚洲第一页日韩专区| 亚洲精品无码久久久久去q| 久久久久亚洲精品天堂| 亚洲色在线无码国产精品不卡| 日韩一区二区三区免费播放| 毛片在线全部免费观看| 无码日韩精品一区二区免费| 日韩精品电影一区亚洲| 久久精品国产亚洲AV麻豆~| 亚洲熟女精品中文字幕| A毛片毛片看免费| 在线视频免费观看爽爽爽| 亚洲成a人无码av波多野按摩| 久久精品国产亚洲| 亚洲色最新高清av网站| 91视频免费观看| 成人免费看片又大又黄| 亚洲精品蜜桃久久久久久| 亚洲中文无码永久免费| 在线看片免费人成视频久网下载| 亚色九九九全国免费视频| 亚洲性在线看高清h片| 亚洲精品午夜在线观看| 特级毛片免费播放| 免费观看无遮挡www的视频| 亚洲AV无码一区二区三区在线观看 | 久久国产精品2020免费m3u8| 免费看又爽又黄禁片视频1000| 久久精品国产亚洲一区二区| 亚洲欧美日韩国产精品一区| 国产成人免费ā片在线观看老同学|