Class PageResponseWrapper
- java.lang.Object
-
- javax.servlet.ServletResponseWrapper
-
- javax.servlet.http.HttpServletResponseWrapper
-
- com.opensymphony.module.sitemesh.filter.PageResponseWrapper
-
- All Implemented Interfaces:
javax.servlet.http.HttpServletResponse,javax.servlet.ServletResponse
public final class PageResponseWrapper extends javax.servlet.http.HttpServletResponseWrapperImplementation of HttpServletResponseWrapper that captures page data instead of sending to the writer.Should be used in filter-chains or when forwarding/including pages using a RequestDispatcher.
In order to capture the response,
getWriter()returns an instance ofPageWriter.- Version:
- $Revision: 1.8 $
- Author:
- Joe Walnes, Scott Farquhar
-
-
Field Summary
Fields Modifier and Type Field Description private booleanabortedprivate Configconfigprivate java.lang.StringcontentTypeprivate booleandebugprivate java.lang.Stringencodingprivate Pagepageprivate PageOutputStreampageOutputStreamprivate PageWriterpageWriterprivate booleanparseablePageprivate javax.servlet.http.HttpServletResponseresponseprivate booleansetContentTypeCalledprivate booleanusingStreamprivate booleanusingWriter-
Fields inherited from interface javax.servlet.http.HttpServletResponse
SC_ACCEPTED, SC_BAD_GATEWAY, SC_BAD_REQUEST, SC_CONFLICT, SC_CONTINUE, SC_CREATED, SC_EXPECTATION_FAILED, SC_FORBIDDEN, SC_GATEWAY_TIMEOUT, SC_GONE, SC_HTTP_VERSION_NOT_SUPPORTED, SC_INTERNAL_SERVER_ERROR, SC_LENGTH_REQUIRED, SC_METHOD_NOT_ALLOWED, SC_MOVED_PERMANENTLY, SC_MOVED_TEMPORARILY, SC_MULTIPLE_CHOICES, SC_NO_CONTENT, SC_NON_AUTHORITATIVE_INFORMATION, SC_NOT_ACCEPTABLE, SC_NOT_FOUND, SC_NOT_IMPLEMENTED, SC_NOT_MODIFIED, SC_OK, SC_PARTIAL_CONTENT, SC_PAYMENT_REQUIRED, SC_PRECONDITION_FAILED, SC_PROXY_AUTHENTICATION_REQUIRED, SC_REQUEST_ENTITY_TOO_LARGE, SC_REQUEST_TIMEOUT, SC_REQUEST_URI_TOO_LONG, SC_REQUESTED_RANGE_NOT_SATISFIABLE, SC_RESET_CONTENT, SC_SEE_OTHER, SC_SERVICE_UNAVAILABLE, SC_SWITCHING_PROTOCOLS, SC_TEMPORARY_REDIRECT, SC_UNAUTHORIZED, SC_UNSUPPORTED_MEDIA_TYPE, SC_USE_PROXY
-
-
Constructor Summary
Constructors Constructor Description PageResponseWrapper(javax.servlet.http.HttpServletResponse response, Config config)Create PageResponse wrapped around an existing HttpServletResponse.PageResponseWrapper(javax.servlet.http.HttpServletResponse response, Config config, boolean debug)Create PageResponse wrapped around an existing HttpServletResponse.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidcloseWriter()Flush and close output stream of wrapped response.private java.lang.StringextractContentTypeValue(java.lang.String type, int startIndex)private OutputBuffergetBufferStream()javax.servlet.ServletOutputStreamgetOutputStream()If the page is parseable, return a wrapped ServletOutputStream, else return the default ServletOutputStream.PagegetPage()private PageOutputStreamgetPageOutputStream()private PageWritergetPageWriter()Return instance ofPageWriterallowing all data written to stream to be stored in temporary buffer.java.io.PrintWritergetWriter()If the page is parseable we return an instance ofPageWriterallowing all data written to stream to be stored in temporary buffer.booleanisUsingStream()booleanisUsingWriter()voidsendError(int sc)voidsendError(int sc, java.lang.String msg)voidsendRedirect(java.lang.String location)voidsetContentLength(int contentLength)Prevent content-length being set if page is parseable.voidsetContentType(java.lang.String type)Set the content-type of the request and store it so it can be passed to thePageParser.voidsetHeader(java.lang.String name, java.lang.String value)Prevent content-length being set if page is parseable.voidsetStatus(int sc)Prevent 'not modified' (304) HTTP status from being sent if page is parseable (so web-server/browser doesn't cache contents).-
Methods inherited from class javax.servlet.http.HttpServletResponseWrapper
addCookie, addDateHeader, addHeader, addIntHeader, containsHeader, encodeRedirectUrl, encodeRedirectURL, encodeUrl, encodeURL, setDateHeader, setIntHeader, setStatus
-
Methods inherited from class javax.servlet.ServletResponseWrapper
flushBuffer, getBufferSize, getCharacterEncoding, getLocale, getResponse, isCommitted, reset, resetBuffer, setBufferSize, setLocale, setResponse
-
-
-
-
Field Detail
-
pageWriter
private PageWriter pageWriter
-
pageOutputStream
private PageOutputStream pageOutputStream
-
usingStream
private boolean usingStream
-
usingWriter
private boolean usingWriter
-
config
private Config config
-
page
private Page page
-
contentType
private java.lang.String contentType
-
encoding
private java.lang.String encoding
-
aborted
private boolean aborted
-
parseablePage
private boolean parseablePage
-
setContentTypeCalled
private boolean setContentTypeCalled
-
debug
private boolean debug
-
response
private javax.servlet.http.HttpServletResponse response
-
-
Constructor Detail
-
PageResponseWrapper
public PageResponseWrapper(javax.servlet.http.HttpServletResponse response, Config config) throws java.io.IOExceptionCreate PageResponse wrapped around an existing HttpServletResponse.- Throws:
java.io.IOException
-
PageResponseWrapper
public PageResponseWrapper(javax.servlet.http.HttpServletResponse response, Config config, boolean debug) throws java.io.IOExceptionCreate PageResponse wrapped around an existing HttpServletResponse.- Throws:
java.io.IOException
-
-
Method Detail
-
setContentType
public void setContentType(java.lang.String type)
Set the content-type of the request and store it so it can be passed to thePageParser.- Specified by:
setContentTypein interfacejavax.servlet.ServletResponse- Overrides:
setContentTypein classjavax.servlet.ServletResponseWrapper
-
extractContentTypeValue
private java.lang.String extractContentTypeValue(java.lang.String type, int startIndex)
-
setContentLength
public void setContentLength(int contentLength)
Prevent content-length being set if page is parseable.- Specified by:
setContentLengthin interfacejavax.servlet.ServletResponse- Overrides:
setContentLengthin classjavax.servlet.ServletResponseWrapper
-
setHeader
public void setHeader(java.lang.String name, java.lang.String value)Prevent content-length being set if page is parseable.- Specified by:
setHeaderin interfacejavax.servlet.http.HttpServletResponse- Overrides:
setHeaderin classjavax.servlet.http.HttpServletResponseWrapper
-
setStatus
public void setStatus(int sc)
Prevent 'not modified' (304) HTTP status from being sent if page is parseable (so web-server/browser doesn't cache contents).- Specified by:
setStatusin interfacejavax.servlet.http.HttpServletResponse- Overrides:
setStatusin classjavax.servlet.http.HttpServletResponseWrapper
-
getOutputStream
public javax.servlet.ServletOutputStream getOutputStream() throws java.io.IOExceptionIf the page is parseable, return a wrapped ServletOutputStream, else return the default ServletOutputStream.
This is called internally by Orion 1.5.4, Resin 2.1.0, Tomcat 4.1.12 - naughty!
- Specified by:
getOutputStreamin interfacejavax.servlet.ServletResponse- Overrides:
getOutputStreamin classjavax.servlet.ServletResponseWrapper- Throws:
java.io.IOException
-
getPageOutputStream
private PageOutputStream getPageOutputStream()
-
getWriter
public java.io.PrintWriter getWriter() throws java.io.IOExceptionIf the page is parseable we return an instance of
PageWriterallowing all data written to stream to be stored in temporary buffer.- Specified by:
getWriterin interfacejavax.servlet.ServletResponse- Overrides:
getWriterin classjavax.servlet.ServletResponseWrapper- Throws:
java.io.IOException
-
getPageWriter
private PageWriter getPageWriter() throws java.io.IOException
Return instance ofPageWriterallowing all data written to stream to be stored in temporary buffer.- Throws:
java.io.IOException
-
closeWriter
public void closeWriter()
Flush and close output stream of wrapped response.
-
getBufferStream
private OutputBuffer getBufferStream()
-
isUsingStream
public boolean isUsingStream()
-
isUsingWriter
public boolean isUsingWriter()
-
getPage
public Page getPage() throws java.io.IOException
Send data written toPageWritertoPageParserand return aPageinstance. If thePageis not parseable, null will be returned.- Throws:
java.io.IOException
-
sendError
public void sendError(int sc) throws java.io.IOException- Specified by:
sendErrorin interfacejavax.servlet.http.HttpServletResponse- Overrides:
sendErrorin classjavax.servlet.http.HttpServletResponseWrapper- Throws:
java.io.IOException
-
sendError
public void sendError(int sc, java.lang.String msg) throws java.io.IOException- Specified by:
sendErrorin interfacejavax.servlet.http.HttpServletResponse- Overrides:
sendErrorin classjavax.servlet.http.HttpServletResponseWrapper- Throws:
java.io.IOException
-
sendRedirect
public void sendRedirect(java.lang.String location) throws java.io.IOException- Specified by:
sendRedirectin interfacejavax.servlet.http.HttpServletResponse- Overrides:
sendRedirectin classjavax.servlet.http.HttpServletResponseWrapper- Throws:
java.io.IOException
-
-