国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

java—數據的壓縮2 (52)

2019-11-15 00:00:32
字體:
來源:轉載
供稿:網友
java—數據的壓縮2 (52)第四步:修改包裝類Myresponse2,讓輸出數據放到一個內存緩存區中
package cn.hongxin.filter;public class GzipFilter2 implements Filter {    public void init(FilterConfig filterConfig) throws ServletException {    }    public void doFilter(ServletRequest request, ServletResponse response,            FilterChain chain) throws IOException, ServletException {        HttpServletResponse resp= (HttpServletResponse) response;        //聲明包裝類對象        MyResponse2 myresp = new MyResponse2(resp);        //放行,調用oneServlet.doGet        chain.doFilter(request, myresp);                 //第二步:從myresp2中讀取原生的數據        byte[] src = myresp.getSrc();                 //第三步:開始壓縮        ByteArrayOutputStream destBytes = new ByteArrayOutputStream();        GZIPOutputStream zip = new GZIPOutputStream(destBytes);        zip.write(src);        zip.close();                //第三步:輸出-使用原生的response        resp.setContentType("text/html;charset=UTF-8");        //獲壓縮以后數據        byte[] dest = destBytes.toByteArray();        System.err.
//第一步:聲明response的包裝類class MyResponse2 extends HttpServletResponseWrapper{    //將這個容器/a.txt,聲明成員變量    private ByteArrayOutputStream srcByte;    public MyResponse2(HttpServletResponse response) {        super(response);    }    //修改增強getWtier方法    @Override    public PrintWriter getWriter() throws IOException {        srcByte = new ByteArrayOutputStream();        PrintWriter out =                 new PrintWriter(                        new OutputStreamWriter(srcByte, "UTF-8"));        return out;    }    //提供一個方法獲取原生 的數據    public byte[] getSrc(){        return srcByte.toByteArray();    }}
第五步:全部的
jsp都要經過壓縮

只要是通過包裝rersponse,且修改了getWriter方法,返回一個自己的printwiter對象。聲明一個放原數據的容器對象。就可以實現數據壓縮。

public class GzipFilter2 implements Filter {    public void init(FilterConfig filterConfig) throws ServletException {    }    public void doFilter(ServletRequest request, ServletResponse response,            FilterChain chain) throws IOException, ServletException {        HttpServletResponse resp= (HttpServletResponse) response;        //聲明包裝類對象        MyResponse2 myresp = new MyResponse2(resp);        //放行,調用oneServlet.doGet        chain.doFilter(request, myresp);                //第二步:從myresp2中讀取原生的數據        byte[] src = myresp.getSrc();                //第三步:開始壓縮        ByteArrayOutputStream destBytes = new ByteArrayOutputStream();        GZIPOutputStream zip = new GZIPOutputStream(destBytes);        zip.write(src);        zip.close();                //第三步:輸出-使用原生的response        resp.setContentType("text/html;charset=UTF-8");        //獲壓縮以后數據        byte[] dest = destBytes.toByteArray();        System.err.println("壓縮之前:"+src.length);        System.err.println("壓縮以后:"+dest.length);        //設置頭        resp.setContentLength(dest.length);        resp.setHeader("Content-Encoding","gzip");        //輸出        OutputStream out = resp.getOutputStream();        out.write(dest);                }    public void destroy() {    }}
//第一步:聲明response的包裝類class MyResponse2 extends HttpServletResponseWrapper{    //將這個容器/a.txt,聲明成員變量    private ByteArrayOutputStream srcByte;    private PrintWriter out;     public MyResponse2(HttpServletResponse response) {        super(response);    }    //修改增強getWtier方法    @Override    public PrintWriter getWriter() throws IOException {        srcByte = new ByteArrayOutputStream();        out =                 new PrintWriter(                        new OutputStreamWriter(srcByte, "UTF-8"));        return out;    }    //提供一個方法獲取原生 的數據    public byte[] getSrc(){        if(out!=null){            out.close();        }         return srcByte.toByteArray();    }}

且它的配置如下:

<filter>

<filter-name>zip2</filter-name>

<filter-class>cn.itcast.filter.GzipFilter2</filter-class>

</filter>

<filter-mapping>

<filter-name>zip2</filter-name>

<url-pattern>*.jsp</url-pattern>

</filter-mapping>

同時實現對getoutputstream和getWtier壓縮

在myrespons2這個類中,對getoutputstream也要覆蓋。

返回一個ServletOutputSteam的匿名對象。

實現witer(int b)方法,將數據寫到bytearrayoyutpoutstream.

public ServletOutputStream getOutputStream() throws IOException {

srcByte = new ByteArrayOutputStream();

ServletOutputStream out = new ServletOutputStream() {

//所有IO最終都是一個個字節寫出信息

@Override

public void write(int b) throws IOException {

System.err.println(">>>:"+b);

srcByte.write(b);//寫到自己的緩存中去-相當于StringBuffer.append(""+b);

}

};

return out;

}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 美姑县| 金华市| 交口县| 久治县| 无极县| 绥江县| 洪泽县| 岳阳市| 吉首市| 广汉市| 玛沁县| 肥城市| 清丰县| 涞源县| 双柏县| 刚察县| 合山市| 饶阳县| 秀山| 淮阳县| 玛多县| 娄烦县| 庆云县| 武宣县| 日喀则市| 肇东市| 宁化县| 牙克石市| 剑河县| 雷波县| 绍兴县| 新绛县| 伊吾县| 阳朔县| 福州市| 赫章县| 蒙自县| 日土县| 肃宁县| 鹤庆县| 卢湾区|