<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)
    好文章,頂一下!
    主站蜘蛛池模板: 久久精品国产亚洲香蕉| 亚洲视频在线精品| 亚洲国产精品人久久| 成年大片免费高清在线看黄| 免费无遮挡无码视频网站| 在线亚洲高清揄拍自拍一品区| 91久久成人免费| 色噜噜亚洲男人的天堂| 岛国大片免费在线观看| 亚洲性无码AV中文字幕| 成年女人喷潮毛片免费播放| 亚洲AV无码片一区二区三区| 免费一区二区三区四区五区| 国产成人1024精品免费| 国产亚洲一区二区三区在线| 十八禁无码免费网站| 亚洲人xxx日本人18| 免费中文字幕不卡视频| 中文字幕成人免费高清在线| 亚洲av永久无码精品网站| 69视频免费观看l| 亚洲熟妇AV一区二区三区浪潮| 国产精品99久久免费| 成人无码区免费A∨直播| 亚洲AV福利天堂一区二区三| 免费在线看v网址| 久久无码av亚洲精品色午夜| 亚洲中久无码不卡永久在线观看| 免费观看91视频| 亚洲天堂男人影院| 亚洲区不卡顿区在线观看| 野花香高清视频在线观看免费| 亚洲一级免费视频| JLZZJLZZ亚洲乱熟无码| 最近中文字幕国语免费完整 | 亚洲国产成人超福利久久精品| 九九九精品成人免费视频| 一级做a爱过程免费视频高清| 亚洲综合久久综合激情久久| 午夜时刻免费入口| 日本一道本不卡免费|