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

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

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

    posts - 36, comments - 419, trackbacks - 0, articles - 0
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    過濾器中向所有JSP頁面插入html代碼

    Posted on 2009-03-12 14:48 BearRui(AK-47) 閱讀(2903) 評論(4)  編輯  收藏 所屬分類: Java
    為公司內部開發了1個簡單的MVC框架,框架中需要向所有JSP頁面的<head>中插入2條引用JS的代碼,實現如下:

    主要是繼承HttpServletResponseWrapper寫1個類(PageResponseWrapper),代碼:
     1 public class PageResponseWrapper extends HttpServletResponseWrapper {
     2     private Buffer buffer;
     3     private HttpServletResponse originalResponse;
     4 
     5     public PageResponseWrapper(final HttpServletResponse response){
     6         super(response);
     7         this.originalResponse = response;
     8         buffer = new Buffer();
     9     }
    10 
    11     @Override
    12     public PrintWriter getWriter() throws IOException {
    13         return buffer.getWriter();
    14     }
    15 
    16     public CharArrayWriter getContent(){
    17         return buffer.getBufferedWriter();
    18     }
    19 
    20     public void close() throws IOException {
    21         buffer.getWriter().close();
    22     }
    23     
    24     public void finalize() throws Throwable {
    25        super.finalize();
    26        buffer.getWriter().close();
    27     }
    28 
    29     /**
    30      * 獲取原始的response
    31      * @return the originalResponse
    32      */
    33     public HttpServletResponse getOriginalResponse() {
    34         return originalResponse;
    35     }
    36 }

    Buffer類:
     1 public class Buffer {
     2 
     3     private CharArrayWriter bufferedWriter;
     4     private PrintWriter exposedWriter;
     5     
     6     public char[] getContents() throws IOException {
     7         //bufferedWriter 表示請求的頁面的html
     8         if (getBufferedWriter() != null) {
     9             return getBufferedWriter().toCharArray();
    10         }
    11         return null;
    12     }
            public PrintWriter getWriter() {
    16         if (getBufferedWriter() == null) {
    17             bufferedWriter = new CharArrayWriter();
    18             exposedWriter = new PrintWriter(getBufferedWriter());
    19         }
    20         return exposedWriter;
    21     }
    22     /**
    23      * @return the bufferedWriter
    24      */
    25     public CharArrayWriter getBufferedWriter() {
    26         return bufferedWriter;
    27     }
    28 }

    過濾器的代碼:
     1 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
     2     HttpServletRequest hRequest = (HttpServletRequest)request;
     3     HttpServletResponse hResponse = (HttpServletResponse)response;
     4     PageResponseWrapper prw = new PageResponseWrapper(hResponse);
     5  
     6     chain.doFilter(request, prw);
     7     // 得到視圖html代碼
     8     String tmpHtml = prw.getContent();
     9     // 最終輸出的html代碼
    10     String retHtml = "";
    11     // 查找<head>
    12     int index = tmpHtml.toLowerCase().indexOf("<head>");
    13     if(index != -1){
    14         index +=6;
    15         retHtml = tmp.substring(0, index) + "<script src='http://./..js'></script>" + tmp.substring(index);
    16     }else{
    17         retHtml = tmpHtml;
    18     }
    19     // 輸出(注意,這里只能使用hResponse,不能使用prwgetWriter())
    20     PrintWriter writer = hResponse.getWriter();
    21     writer.write(retHtml);
    22     writer.close();   
    23     writer.close();
    24     writer.flush();     
    25 }





    [作者]:BearRui(AK-47)
    [博客]: http://m.tkk7.com/bearrui/
    [聲明]:本博所有文章版權歸作者所有(除特殊說明以外),轉載請注明出處.
    英雄,別走啊,幫哥評論下:  

    精彩推薦 好文要頂 水平一般 看不懂 還需努力

    評論

    # re: 過濾器中向所有JSP頁面插入html代碼[未登錄]  回復  更多評論   

    2009-03-16 14:38 by abc
    用sitemesh 很輕松就做到了

    # re: 過濾器中向所有JSP頁面插入html代碼  回復  更多評論   

    2009-03-16 15:47 by BearRui(AK-47)
    @abc
    sitemesh 是可以,sitemesh也是這樣實現的

    # re: 過濾器中向所有JSP頁面插入html代碼  回復  更多評論   

    2010-06-09 13:57 by BearRui(AK-47)
    文章很精彩,推薦一下!

    # re: 過濾器中向所有JSP頁面插入html代碼  回復  更多評論   

    2010-06-09 14:00 by BearRui(AK-47)
    好文章,頂一下!
    主站蜘蛛池模板: 亚洲国产婷婷六月丁香| 亚洲国产香蕉人人爽成AV片久久| 亚洲中文久久精品无码| 羞羞视频免费网站含羞草| 好男人看视频免费2019中文| 7777久久亚洲中文字幕蜜桃| 日本免费大黄在线观看| 亚洲精品私拍国产福利在线| 91免费福利精品国产| 久久亚洲日韩看片无码| 1000部拍拍拍18免费网站| 亚洲自偷自拍另类图片二区| 青青青国产在线观看免费| 亚洲人成在线免费观看| 成年女人18级毛片毛片免费观看| 一本色道久久88—综合亚洲精品| 成年女人毛片免费播放视频m| 亚洲精品久久无码| 免费吃奶摸下激烈视频| 中文字幕av免费专区| 亚洲国产精品久久久久网站| 91久久成人免费| 亚洲国产精品嫩草影院| 亚洲国产精品不卡毛片a在线| 特级做A爰片毛片免费看无码 | 亚洲欧洲一区二区三区| 久99久无码精品视频免费播放| 久久精品国产69国产精品亚洲| 久久精品人成免费| 亚洲av永久无码精品天堂久久| 午夜私人影院免费体验区| 污污免费在线观看| 久久亚洲精品无码| 成年女人毛片免费播放视频m| 男男gvh肉在线观看免费| 亚洲精品乱码久久久久久按摩| 亚洲免费在线视频播放| 精品国产日韩亚洲一区在线| 亚洲一区二区三区在线观看精品中文| 91香焦国产线观看看免费| 亚洲AV综合色区无码一二三区 |