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

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

          Posted on 2009-03-12 14:48 BearRui(AK-47) 閱讀(2909) 評論(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://www.aygfsteel.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)
          好文章,頂一下!
          主站蜘蛛池模板: 平原县| 荆门市| 平湖市| 称多县| 舞钢市| 安庆市| 灵石县| 常山县| 庆城县| 灵璧县| 和政县| 光山县| 长治市| 科技| 衡南县| 阳高县| 永川市| 呼玛县| 田林县| 视频| 札达县| 浪卡子县| 肃北| 蓬溪县| 沾益县| 始兴县| 云梦县| 句容市| 松江区| 呼玛县| 汾阳市| 龙里县| 茶陵县| 原阳县| 黄大仙区| 宁波市| 宿迁市| 莱芜市| 贵南县| 庆阳市| 安达市|