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

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

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

    無為

    無為則可為,無為則至深!

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      190 Posts :: 291 Stories :: 258 Comments :: 0 Trackbacks

    同servlet非常類似,F(xiàn)ilter就是JAVA組件,請求發(fā)送到servlet前,可以使用過濾器Filter截獲和處理請求,同時servlet結(jié)束以后,響應發(fā)回以前同樣可以使用過濾器Filter處理響應。WEB容器可以用web.xml部署文件聲明何時調(diào)用過濾器Filter。

    過濾器Filter主要功能是:1、完成安全檢查;2、重新格式化請求首部或體;3、建立請求審計或記錄日志---請求過濾器Filter

    1、壓縮響應流;2、追加或者修改響應流;3、創(chuàng)建一個定制響應---響應過濾器Filter


    同servlet一樣,過濾器Filter也具有生命周期:init()->doFilter()->destroy().要實現(xiàn)模塊化,F(xiàn)ilterChain功不可末,它可以采用不同的方式組合過濾器,協(xié)調(diào)完成一些事情,它由部署文件中的filter元素驅(qū)動,和Filter都在javax.servlet包中。在servlet2.4中,過濾器同樣可以用于請求分派器,但須在web.xml中聲明,<dispatcher>INCLUDE或FORWARD或REQUEST或ERROR</dispatcher>該元素位于filter-mapping中。


    1、實現(xiàn)一個Filter,代碼如下:

    public class MyFilter implements Filter {

    public void init(FilterConfig arg0) throws ServletException {

    }

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


    HttpServletRequest httpRequest = (HttpServletRequest) request;
    HttpServletResponse httpResponse = (HttpServletResponse)response;
    CachedResponseWrapper wrapper = new CachedResponseWrapper(httpResponse);
    // 寫入wrapper:
    chain.doFilter(request, wrapper);
    // 首先判斷status, 只對200狀態(tài)處理:
    if(wrapper.getStatus()==HttpServletResponse.SC_OK) {
    // 對響應進行處理,這里是進行GZip壓縮:
    byte[] data = GZipUtil.gzip(wrapper.getResponseData());
    httpResponse.setContentType(getContentType());
    httpResponse.setContentLength(data.length);
    httpResponse.setHeader("Content-Encoding", "gzip");

    ServletOutputStream output = response.getOutputStream();
    output.write(data);
    output.flush();
    }
    }

    public void destroy() {

    }

    }


    2、實現(xiàn)一個HttpServletResponseWrapper

    public class CheckFrameHttpServletResponseWrapper extends
    HttpServletResponseWrapper {

    public CheckFrameHttpServletResponseWrapper(HttpServletResponse response) {

    super(response);
    }

    public PrintWriter getWriter() throws IOException{
    return new CheckFrameWriter(super.getWriter());
    }

    }

    3、實現(xiàn)一個Writer

    public class CheckFrameWriter extends PrintWriter {
    String checkString = "<script>\n if(window.top.frames.length==0){\n"
    + "window.location.href=\"https://aix:9080/sso/mainlayout.faces?"
    + "contentURL=http://aix:9080/security/paramsMaintain/"
    + "addParams.faces?roleId=0001\"\n" + "}\n</script>\n";

    public CheckFrameWriter(Writer out) {
    super(out);
    }

    public void write(int c) {
    super.write((char) c);
    }

    public void write(char buf[], int off, int len) {
    StringBuffer sb = new StringBuffer(len);
    for (int i = 0; i < len; i++) {
    sb.append(buf[off + i]);
    }
    String s = sb.toString();
    int bodyIndex = s.indexOf("<body>");
    if (bodyIndex > -1) {
    String part1 = s.substring(0, bodyIndex);
    String part2 = s.substring(bodyIndex );
    s = part1 + checkString + part2;
    }
    for (int i = 0; i < s.length(); i++) {
    write(s.charAt(i));
    }
    }

    public void write(String s, int off, int len) {
    for (int i = 0; i < len; i++) {
    write(s.charAt(off + i));
    }
    }
    }


    在Writer中,你便可以隨心所欲的修改Response的內(nèi)容了。

    4、在Web.xml中加入相應的配置元素,對JSP進行攔截。



    凡是有該標志的文章,都是該blog博主Caoer(草兒)原創(chuàng),凡是索引、收藏
    、轉(zhuǎn)載請注明來處和原文作者。非常感謝。

    posted on 2007-07-25 13:56 草兒 閱讀(7260) 評論(3)  編輯  收藏 所屬分類: Web Data MiningJAVA WEB應用

    Feedback

    # re: JAVA組件過濾器Filter[未登錄] 2007-07-25 16:33 劉明
    正好問問。

    我做了一個過濾器,我想過濾某一組資源里的某幾個資源該怎么做呢?配置多個servlet-mapping不可行啊。

    <filter>
    <filter-name>AuditFilter</filter-name>
    <filter-class>com.wrox.projsp.ch14.filters.AuditFilter
    </filter-class>
    </filter>
    <filter-mapping>
    <filter-name>AuditFilter</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>

    以上的配置是對所有資源的過濾,如果我只想過濾里面的幾個資源呢?比如過濾一個html、2個jsp什么的,怎么做呢?謝謝。  回復  更多評論
      

    # re: JAVA組件過濾器Filter 2007-07-26 00:34 草兒
    我個人的解決方案是:1、采用目錄分割<url-pattern>/html/*</url-pattern>
    <url-pattern>/jsp/*</url-pattern>
    自然會根據(jù)url模式匹配過濾器;
    2、在web.xml部署多個filter元素,然后在實現(xiàn)Filter接口定制過濾器類中有doFilter()方法調(diào)用;  回復  更多評論
      

    # re: JAVA組件過濾器Filter[未登錄] 2007-07-26 09:34 劉明
    謝謝草兒。

    嗯。。。是個問題,感覺控制力還是不夠啊。看來應用的時候還是有個好的設計才行。  回復  更多評論
      

    主站蜘蛛池模板: 永久免费的网站在线观看| 亚洲人成小说网站色| 国产真实伦在线视频免费观看| a级毛片高清免费视频就| 亚洲AV日韩综合一区| 亚洲成a人不卡在线观看| 亚洲精品午夜无码电影网| 国产一区二区三区在线观看免费 | 巨胸喷奶水视频www网免费| 一级毛片不卡片免费观看| 国产特黄一级一片免费| 国产精品久久亚洲一区二区| 亚洲成a人片在线观看精品| 久久狠狠高潮亚洲精品| 亚洲AV无码乱码国产麻豆| AV在线亚洲男人的天堂| 亚洲成av人片一区二区三区| 国产一卡二卡≡卡四卡免费乱码| 大香人蕉免费视频75| 成年女人视频网站免费m | 国产成+人+综合+亚洲专| 99久久精品国产亚洲| 亚洲AV无码乱码在线观看富二代 | 国产精品国产亚洲区艳妇糸列短篇 | 亚洲宅男精品一区在线观看| 亚洲酒色1314狠狠做| 亚洲国产一区二区a毛片| 久久精品国产亚洲AV网站 | 99久久久国产精品免费蜜臀| 性xxxxx大片免费视频| 久久99精品视免费看| 久久精品视频免费播放| 无码少妇精品一区二区免费动态| 午夜精品射精入后重之免费观看| 久久免费视频观看| 久久久久久成人毛片免费看| 99国产精品免费视频观看| 91香蕉在线观看免费高清| 曰批视频免费40分钟试看天天| 91免费国产自产地址入| 欧亚精品一区三区免费|