⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cachehttpservletresponsewrapper.java

📁 这个weblogging 设计得比较精巧
💻 JAVA
字号:
/* * Copyright (c) 2002-2003 by OpenSymphony * All rights reserved. */package org.roller.presentation.pagecache.rollercache;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import java.io.IOException;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.util.Locale;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpServletResponseWrapper;/** * CacheServletResponse is a serialized representation of a response * * @author  <a href="mailto:sergek@lokitech.com">Serge Knystautas</a> * @version $Revision: 1.2 $ */public class CacheHttpServletResponseWrapper extends HttpServletResponseWrapper {    private final Log log = LogFactory.getLog(this.getClass());    /**     * We cache the printWriter so we can maintain a single instance     * of it no matter how many times it is requested.     */    private PrintWriter cachedWriter;    private ResponseContent result = null;    private SplitServletOutputStream cacheOut = null;    private int status = SC_OK;    /**     * Constructor     *     * @param response The servlet response     */    public CacheHttpServletResponseWrapper(HttpServletResponse response) {        super(response);        result = new ResponseContent();    }    /**     * Get a response content     *     * @return The content     */    public ResponseContent getContent() {        //Create the byte array        result.commit();        //Return the result from this response        return result;    }    /**     * Set the content type     *     * @param value The content type     */    public void setContentType(String value) {        super.setContentType(value);        result.setContentType(value);    }    /**     * Set the date of a header     *     * @param name The header name     * @param value The date     */    public void setDateHeader(String name, long value) {        if (log.isDebugEnabled()) {            log.debug("dateheader: " + name + ": " + value);        }        if ("last-modified".equalsIgnoreCase(name)) {            result.setLastModified(value);        }        super.setDateHeader(name, value);    }    /**     * Set a header field     *     * @param name The header name     * @param value The header value     */    public void setHeader(String name, String value) {        if (log.isDebugEnabled()) {            log.debug("header: " + name + ": " + value);        }        super.setHeader(name, value);    }    /**     * Set the int value of the header     *     * @param name The header name     * @param value The int value     */    public void setIntHeader(String name, int value) {        if (log.isDebugEnabled()) {            log.debug("intheader: " + name + ": " + value);        }        super.setIntHeader(name, value);    }    /**     * We override this so we can catch the response status. Only     * responses with a status of 200 (<code>SC_OK</code>) will     * be cached.     */    public void setStatus(int status) {        super.setStatus(status);        this.status = status;    }    /**     * We override this so we can catch the response status. Only     * responses with a status of 200 (<code>SC_OK</code>) will     * be cached.     */    public void sendError(int status, String string) throws IOException {        super.sendError(status, string);        this.status = status;    }    /**     * We override this so we can catch the response status. Only     * responses with a status of 200 (<code>SC_OK</code>) will     * be cached.     */    public void sendError(int status) throws IOException {        super.sendError(status);        this.status = status;    }    /**     * We override this so we can catch the response status. Only     * responses with a status of 200 (<code>SC_OK</code>) will     * be cached.     */    public void setStatus(int status, String string) {        super.setStatus(status, string);        this.status = status;    }    public void sendRedirect(String location) throws IOException {        this.status = SC_MOVED_TEMPORARILY;        super.sendRedirect(location);    }    /**     * Retrieves the captured HttpResponse status.     */    public int getStatus() {        return status;    }    /**     * Set the locale     *     * @param value The locale     */    public void setLocale(Locale value) {        super.setLocale(value);        result.setLocale(value);    }    /**     * Get an output stream     *     * @throws IOException     */    public ServletOutputStream getOutputStream() throws IOException {        // Pass this faked servlet output stream that captures what is sent        if (cacheOut == null) {            cacheOut = new SplitServletOutputStream(                result.getOutputStream(), super.getOutputStream());        }        return cacheOut;    }    /**     * Get a print writer     *     * @throws IOException     */    public PrintWriter getWriter() throws IOException {       if (cachedWriter == null) {           cachedWriter = new SplitPrintWriter(              new PrintWriter(new OutputStreamWriter(result.getOutputStream(),"UTF-8")),               super.getWriter());       }       return cachedWriter;    }    public void flushBuffer() throws IOException {        super.flushBuffer();        if (cacheOut != null) {            cacheOut.flush();        }        if (cachedWriter != null) {            cachedWriter.flush();        }    }        public String getCharacterEncoding()    {        return "UTF-8";    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -