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

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

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

    項目里需要在把servlet,jsp生成的html代碼存儲到數(shù)據(jù)庫中。如何解決,比較直接的想法是客戶端用xmlhttp,或者直接在客戶端js代碼里發(fā)出請求,然后把得到的html代碼在作為提交數(shù)據(jù)發(fā)送給服務器端,由服務器端程序接受并存入數(shù)據(jù)庫中。
        但是此方法需要耗費兩次網(wǎng)絡傳輸,肯定性能不加,而且處理起來要幾塊程序同時協(xié)作才行。還是想辦法從服務器端直接獲取。因為從response無法直接得到輸出流,得想其他的辦法。一種是干脆在服務器端寫一個監(jiān)控socket接口的客戶端程序,或者用httpunit幫助完成,就是把客戶端程序移到服務器端執(zhí)行。還是相對比較復雜,能不能從response入手?
       答案是肯定的,采用response代理來截獲response的幾個輸出函數(shù),然后存儲起來,已備查詢。
    靈感來自于前一陣一直研究的java動態(tài)代理機制(現(xiàn)在應用在spring的aop實現(xiàn)中),此處不用動態(tài)代理,就使用靜態(tài)代理,proxy模式就足夠了。
      分別實現(xiàn)三個代理類:ServletResponseProxy,ServletOutputStreamProxy,PrintWriterProxy
    Responseproxy 主要代碼:
    public class ServletResponseProxy implements HttpServletResponse {
     private HttpServletResponse obj;//實際的HttpServletResponse 實例
     
     public ServletResponseProxy(HttpServletResponse obj) {
      this.obj = obj;
      HtmlBuffer.cleanStr(); //情空緩存
     }   
     
    //獲得outputStreamProxy
     public ServletOutputStream getOutputStream() throws IOException {
      ServletOutputStream so = obj.getOutputStream();
      ServletOutputStreamProxy sop = new ServletOutputStreamProxy(so);
      return sop;
     }
     //獲得printWriterProxy
     public PrintWriter getWriter() throws IOException {
      PrintWriter pw = obj.getWriter();
      PrintWriterProxy pwp = new PrintWriterProxy(pw);
      return (PrintWriter) pwp;
     }
    }
    PrintWriterProxy:
     
    public class PrintWriterProxy
        extends PrintWriter {
      private PrintWriter pw = null;
     
      public PrintWriterProxy(PrintWriter pw) {
        super(pw);
        this.pw = pw;
      }
    //截獲寫內(nèi)容寫入buffer
      public void write(int c) {
        char a = (char) c;
        String s = new String(new char[] {a});
        HtmlBuffer.addStr(s);
        pw.write(c);
      }
    }
     
    ServletOutputStreamProxy:
    public class ServletOutputStreamProxy
        extends ServletOutputStream {
      private ServletOutputStream obj;
      public ServletOutputStreamProxy(ServletOutputStream obj){
        this.obj = obj;
      }
    //截獲寫內(nèi)容寫入buffer
      public void write(int b) throws IOException {
        Integer it = new Integer(b);
        HtmlBuffer.addStr(new String(new byte[]{it.byteValue()}));
        obj.write(b);
      }
    }

     
        由于web Httpserver 是多線程執(zhí)行服務端程序,所以buffer應該分線程來存取,這樣大家才能不互相干擾。所以buffer需要實現(xiàn)TreadLocal接口。
        HtmlBuffer代碼簡單實現(xiàn)如下:
    public class HtmlBuffer {
     private static class HtmlInfo extends ThreadLocal {
      private Map values = Collections.synchronizedMap(new HashMap());
      public Object initialValue() {
       return new String();
      }
      public String getHtmlStr() {
       return (String) this.get();
      }
      public Object get() {
       Thread curThread = Thread.currentThread();
       Object o = values.get(curThread);
       if (o == null && !values.containsKey(curThread)) {
        o = initialValue();
        values.put(curThread, o);
       }
       return o;
      }
      public void set(Object newValue) {
       values.put(Thread.currentThread(), newValue);
      }
     } 
     private static HtmlInfo htmlInfo = new HtmlInfo();
     
     public static void cleanStr(){
      htmlInfo.set( "");
     }
     public static void addStr(String htmlStr) {
      String htmlstr = (String)htmlInfo.get();
      if(htmlstr == null) htmlstr ="";
      htmlstr += htmlStr;
      htmlInfo.set( htmlstr);
     }
     public static String getStr() {
      return (String)htmlInfo.get();
     }
    }

    posts - 9, comments - 27, trackbacks - 0, articles - 19

    Copyright © publisher luo

    主站蜘蛛池模板: 亚洲理论片在线中文字幕| 免费观看a级毛片| 亚洲午夜国产精品无卡| 大学生一级毛片免费看| 成a人片亚洲日本久久| 国产自偷亚洲精品页65页| 美丽的姑娘免费观看在线播放 | 成人超污免费网站在线看| 国产精品亚洲专区无码唯爱网| 国产成人精品日本亚洲专区 | 亚洲国产综合无码一区二区二三区 | 美景之屋4在线未删减免费| 亚洲无人区一区二区三区| 精品免费久久久久久久| 偷自拍亚洲视频在线观看99| 亚洲国产女人aaa毛片在线| 在线观看91精品国产不卡免费| 中文字幕在线视频免费| 一区二区亚洲精品精华液| 亚洲乱码中文字幕手机在线| 91av视频免费在线观看| 亚洲av日韩av永久无码电影| 一二三四视频在线观看中文版免费 | 麻豆国产精品免费视频| 国产亚洲精品影视在线| 亚洲高清无码在线观看| 日本免费一区二区三区| 亚洲精品无码国产片| 亚洲色中文字幕无码AV| 色se01短视频永久免费| 亚洲av无码兔费综合| 亚洲高清成人一区二区三区 | 亚洲国产精品美女| 全部免费毛片在线| 91麻豆国产免费观看| 国产成人亚洲综合a∨| 亚洲AV无码日韩AV无码导航| 免费看少妇作爱视频| 一级毛片免费观看不卡的| 亚洲精品中文字幕无乱码| 国产成人精品免费视频软件|