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

          日歷

          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          搜索

          •  

          積分與排名

          • 積分 - 288797
          • 排名 - 200

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

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

          主要是繼承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://www.aygfsteel.com/bearrui/
          [聲明]:本博所有文章版權(quán)歸作者所有(除特殊說明以外),轉(zhuǎn)載請注明出處.
          英雄,別走啊,幫哥評論下:  

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

          評論

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

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

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

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

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

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

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

          2010-06-09 14:00 by BearRui(AK-47)
          好文章,頂一下!
          主站蜘蛛池模板: 綦江县| 阳城县| 嘉义市| 湘乡市| 大邑县| 马鞍山市| 金山区| 昌都县| 洞头县| 安平县| 凭祥市| 临猗县| 加查县| 宁国市| 浏阳市| 宁明县| 罗平县| 买车| 沁水县| 灯塔市| 义乌市| 界首市| 南昌市| 泰州市| 高阳县| 承德县| 乃东县| 翁源县| 南靖县| 东乌珠穆沁旗| 南和县| 高州市| 霍邱县| 元朗区| 石门县| 灵寿县| 临颍县| 江口县| 嫩江县| 英吉沙县| 鄂州市|