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

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

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

    posts - 23, comments - 0, trackbacks - 0, articles - 3
      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    過(guò)濾器總結(jié)

    Posted on 2008-08-18 17:05 beauty9235 閱讀(219) 評(píng)論(0)  編輯  收藏

    作者: beauty9235  鏈接:http://beauty9235.javaeye.com/blog/229651  發(fā)表時(shí)間: 2008年06月09日

    聲明:本文系JavaEye網(wǎng)站發(fā)布的原創(chuàng)博客文章,未經(jīng)作者書面許可,嚴(yán)禁任何網(wǎng)站轉(zhuǎn)載本文,否則必將追究法律責(zé)任!

    過(guò)濾器總結(jié)
    一、Servlet過(guò)濾器的概念:

    Servlet過(guò)濾器是在Java Servlet規(guī)范2.3中定義的,它能夠?qū)ervlet容器的請(qǐng)求和響應(yīng)對(duì)象進(jìn)行檢查和修改。   

    Servlet過(guò)濾器本身并不產(chǎn)生請(qǐng)求和響應(yīng)對(duì)象,它只能提供過(guò)濾作用。Servlet過(guò)期能夠在Servlet被調(diào)用之前檢查Request對(duì)象,修改Request Header和Request內(nèi)容;在Servlet被調(diào)用之后檢查Response對(duì)象,修改Response Header和Response內(nèi)容。

    Servlet過(guò)期負(fù)責(zé)過(guò)濾的Web組件可以是Servlet、JSP或者HTML文件。 

     

    二、Servlet過(guò)濾器的特點(diǎn):

    A.Servlet過(guò)濾器可以檢查和修改ServletRequest和ServletResponse對(duì)象
    B.Servlet過(guò)濾器可以被指定和特定的URL關(guān)聯(lián),只有當(dāng)客戶請(qǐng)求訪問(wèn)該URL時(shí),才會(huì)觸發(fā)過(guò)濾器
    C.Servlet過(guò)濾器可以被串聯(lián)在一起,形成管道效應(yīng),協(xié)同修改請(qǐng)求和響應(yīng)對(duì)象

     

    三、Servlet過(guò)濾器的作用:

    A.查詢請(qǐng)求并作出相應(yīng)的行動(dòng)。
    B.阻塞請(qǐng)求-響應(yīng)對(duì),使其不能進(jìn)一步傳遞。
    C.修改請(qǐng)求的頭部和數(shù)據(jù)。用戶可以提供自定義的請(qǐng)求。
    D.修改響應(yīng)的頭部和數(shù)據(jù)。用戶可以通過(guò)提供定制的響應(yīng)版本實(shí)現(xiàn)。
    E.與外部資源進(jìn)行交互。

     

    四、Servlet過(guò)濾器的適用場(chǎng)合:

    A.認(rèn)證過(guò)濾
    B.登錄和審核過(guò)濾
    C.圖像轉(zhuǎn)換過(guò)濾
    D.?dāng)?shù)據(jù)壓縮過(guò)濾
    E.加密過(guò)濾
    F.令牌過(guò)濾
    G.資源訪問(wèn)觸發(fā)事件過(guò)濾
    H.XSL/T過(guò)濾
    I.Mime-type過(guò)濾

     

    五、Servlet過(guò)濾器接口的構(gòu)成:

    所有的Servlet過(guò)濾器類都必須實(shí)現(xiàn)javax.servlet.Filter接口。這個(gè)接口含有3個(gè)過(guò)濾器類必須實(shí)現(xiàn)的方法:

    A.init(FilterConfig):
    這是Servlet過(guò)濾器的初始化方法,Servlet容器創(chuàng)建Servlet過(guò)濾器實(shí)例后將調(diào)用這個(gè)方法。在這個(gè)方法中可以讀取web.xml文件中Servlet過(guò)濾器的初始化參數(shù)

    B.doFilter(ServletRequest,ServletResponse,FilterChain):
    這個(gè)方法完成實(shí)際的過(guò)濾操作,當(dāng)客戶請(qǐng)求訪問(wèn)于過(guò)濾器關(guān)聯(lián)的URL時(shí),Servlet容器將先調(diào)用過(guò)濾器的doFilter方法。FilterChain參數(shù)用于訪問(wèn)后續(xù)過(guò)濾器

    B.destroy():
    Servlet容器在銷毀過(guò)濾器實(shí)例前調(diào)用該方法,這個(gè)方法中可以釋放Servlet過(guò)濾器占用的資源

     

    六、Servlet過(guò)濾器的創(chuàng)建步驟:

    A.實(shí)現(xiàn)javax.servlet.Filter接口
    B.實(shí)現(xiàn)init方法,讀取過(guò)濾器的初始化函數(shù)
    C.實(shí)現(xiàn)doFilter方法,完成對(duì)請(qǐng)求或過(guò)濾的響應(yīng)
    D.調(diào)用FilterChain接口對(duì)象的doFilter方法,向后續(xù)的過(guò)濾器傳遞請(qǐng)求或響應(yīng)
    E.銷毀過(guò)濾器

     

    七、Servlet過(guò)濾器對(duì)請(qǐng)求的過(guò)濾:

    A.Servlet容器創(chuàng)建一個(gè)過(guò)濾器實(shí)例
    B.過(guò)濾器實(shí)例調(diào)用init方法,讀取過(guò)濾器的初始化參數(shù)
    C.過(guò)濾器實(shí)例調(diào)用doFilter方法,根據(jù)初始化參數(shù)的值判斷該請(qǐng)求是否合法
    D.如果該請(qǐng)求不合法則阻塞該請(qǐng)求
    E.如果該請(qǐng)求合法則調(diào)用chain.doFilter方法將該請(qǐng)求向后續(xù)傳遞

     

    八、Servlet過(guò)濾器對(duì)響應(yīng)的過(guò)濾:

    A.過(guò)濾器截獲客戶端的請(qǐng)求
    B.重新封裝ServletResponse,在封裝后的ServletResponse中提供用戶自定義的輸出流
    C.將請(qǐng)求向后續(xù)傳遞
    D.Web組件產(chǎn)生響應(yīng)
    E.從封裝后的ServletResponse中獲取用戶自定義的輸出流
    F.將響應(yīng)內(nèi)容通過(guò)用戶自定義的輸出流寫入到緩沖流中
    G.在緩沖流中修改響應(yīng)的內(nèi)容后清空緩沖流,輸出響應(yīng)內(nèi)容


    九、Servlet過(guò)濾器的發(fā)布:

    A.發(fā)布Servlet過(guò)濾器時(shí),必須在web.xml文件中加入<filter>元素和<filter-mapping>元素。

    B.<filter>元素用來(lái)定義一個(gè)過(guò)濾器:
    屬性                   含義
    filter-name    指定過(guò)濾器的名字
    filter-class    指定過(guò)濾器的類名
    init-param    為過(guò)濾器實(shí)例提供初始化參數(shù),可以有多個(gè)

    C.<filter-mapping>元素用于將過(guò)濾器和URL關(guān)聯(lián):
    屬性                     含義
    filter-name    指定過(guò)濾器的名字
    url-pattern    指定和過(guò)濾器關(guān)聯(lián)的URL,為"/"表示所有URL

     

    十一、Servlet過(guò)濾器使用的注意事項(xiàng)

    A.由于Filter、FilterConfig、FilterChain都是位于javax.servlet包下,并非HTTP包所特有的,所以其中所用到的請(qǐng)求、響應(yīng)對(duì)象ServletRequest、ServletResponse在使用前都必須先轉(zhuǎn)換成HttpServletRequest、HttpServletResponse再進(jìn)行下一步操作。

    B.在web.xml中配置Servlet和Servlet過(guò)濾器,應(yīng)該先聲明過(guò)濾器元素,再聲明Servlet元素


    C.如果要在Servlet中觀察過(guò)濾器生成的日志,應(yīng)該確保在server.xml的localhost對(duì)應(yīng)的<host>元素中配置如下<logger>元素:
    <Logger className = "org.apache.catalina.logger.FileLogger"
    directory = "logs" prefix = "localhost_log."suffix=".txt"
    timestamp = "true"/>

    常用的過(guò)濾器實(shí)例:

    //對(duì)整站編碼的過(guò)濾
    public void doFilter(ServletRequest request, ServletResponse sresponse,FilterChain chain) {
      try{
       request.setCharacterEncoding("GBK");
       chain.doFilter(request, sresponse);
      }catch(Exception e){
       e.printStackTrace();
      }
     }
    //對(duì)用戶登陸進(jìn)行驗(yàn)證 
     public void doFilter(ServletRequest srequest, ServletResponse sresponse,FilterChain chain) {
      try {
       HttpServletRequest request = (HttpServletRequest) srequest;
       HttpServletResponse response = (HttpServletResponse) sresponse;
       HttpSession session = request.getSession();
       User user = (User) session.getAttribute("user");
       if (user == null) { 
         response.sendRedirect("/test/index.html"); 
       } else {
        chain.doFilter(request, response);
       }
      } catch (Exception e) {
       e.printStackTrace();
      }
     }
    //對(duì)用戶權(quán)限進(jìn)行過(guò)濾 
    public void doFilter(ServletRequest srequest, ServletResponse sresponse,FilterChain chain) {
      try {
       HttpServletRequest requst = (HttpServletRequest) srequest;
       HttpServletResponse response = (HttpServletResponse) sresponse;
       HttpSession session = requst.getSession();
       User user = (User) session.getAttribute("user");
       String ad=user.getIsAdmin().toString();
       if (user == null || ad.equals("0")) { 
         response.sendRedirect("/test/main.jsp");
       } else {
        chain.doFilter(srequest, sresponse);
       }
      } catch (Exception e) {
       e.printStackTrace();
      }
     } 
    

    web.xml中的配置

    
        encodingfilter
        filter.EncodingFilter
      
      
      firstfilter
      filter.FirstFilter
      
      
      secondfilter
      filter.SecondFilter
      
      
        encodingfilter
        /*
      
      
        firstfilter
        /web/*
      
        
        secondfilter
        /web/Charge.jsp
       
    

    本文的討論也很精彩,瀏覽討論>>


    JavaEye推薦




    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲妇熟XXXX妇色黄| 国产亚洲精品无码专区| 亚洲精品在线播放| 成人久久免费网站| 亚洲精品无码高潮喷水在线| 成人嫩草影院免费观看| 四虎免费影院4hu永久免费| 亚洲成aⅴ人片久青草影院按摩| 毛片免费在线视频| 中文字幕乱码亚洲无线三区 | 国产AV无码专区亚洲AV男同| 一级做a爰性色毛片免费| 亚洲熟妇无码AV在线播放| 三年在线观看免费观看完整版中文| 亚洲精品无码永久中文字幕| 无码精品一区二区三区免费视频| 亚洲黄色网址在线观看| 中文字幕无码视频手机免费看| 亚洲熟妇无码AV| 国产一区二区三区免费在线观看| 一级毛片aa高清免费观看| 国产亚洲精AA在线观看SEE| 91麻豆最新在线人成免费观看 | 亚洲精品视频免费观看| 亚洲免费人成在线视频观看| 最近中文字幕免费mv在线视频| 亚洲精品人成网在线播放影院| 天天摸天天碰成人免费视频| 日日狠狠久久偷偷色综合免费| 亚洲成av人影院| 破了亲妺妺的处免费视频国产| 国产黄在线观看免费观看不卡| 亚洲视频在线观看免费| 久久电影网午夜鲁丝片免费| 日韩大片免费观看视频播放| 亚洲高清在线视频| 色吊丝永久在线观看最新免费| 色老头综合免费视频| 亚洲视频在线观看地址| 国产精品公开免费视频| 国产激情免费视频在线观看|