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.HttpServletResponseWrapper
Implementation 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 boolean
aborted
private Config
config
private java.lang.String
contentType
private boolean
debug
private java.lang.String
encoding
private Page
page
private PageOutputStream
pageOutputStream
private PageWriter
pageWriter
private boolean
parseablePage
private javax.servlet.http.HttpServletResponse
response
private boolean
setContentTypeCalled
private boolean
usingStream
private boolean
usingWriter
-
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 void
closeWriter()
Flush and close output stream of wrapped response.private java.lang.String
extractContentTypeValue(java.lang.String type, int startIndex)
private OutputBuffer
getBufferStream()
javax.servlet.ServletOutputStream
getOutputStream()
If the page is parseable, return a wrapped ServletOutputStream, else return the default ServletOutputStream.Page
getPage()
private PageOutputStream
getPageOutputStream()
private PageWriter
getPageWriter()
Return instance ofPageWriter
allowing all data written to stream to be stored in temporary buffer.java.io.PrintWriter
getWriter()
If the page is parseable we return an instance ofPageWriter
allowing all data written to stream to be stored in temporary buffer.boolean
isUsingStream()
boolean
isUsingWriter()
void
sendError(int sc)
void
sendError(int sc, java.lang.String msg)
void
sendRedirect(java.lang.String location)
void
setContentLength(int contentLength)
Prevent content-length being set if page is parseable.void
setContentType(java.lang.String type)
Set the content-type of the request and store it so it can be passed to thePageParser
.void
setHeader(java.lang.String name, java.lang.String value)
Prevent content-length being set if page is parseable.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).-
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.IOException
Create 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.IOException
Create 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:
setContentType
in interfacejavax.servlet.ServletResponse
- Overrides:
setContentType
in 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:
setContentLength
in interfacejavax.servlet.ServletResponse
- Overrides:
setContentLength
in 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:
setHeader
in interfacejavax.servlet.http.HttpServletResponse
- Overrides:
setHeader
in 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:
setStatus
in interfacejavax.servlet.http.HttpServletResponse
- Overrides:
setStatus
in classjavax.servlet.http.HttpServletResponseWrapper
-
getOutputStream
public javax.servlet.ServletOutputStream getOutputStream() throws java.io.IOException
If 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:
getOutputStream
in interfacejavax.servlet.ServletResponse
- Overrides:
getOutputStream
in classjavax.servlet.ServletResponseWrapper
- Throws:
java.io.IOException
-
getPageOutputStream
private PageOutputStream getPageOutputStream()
-
getWriter
public java.io.PrintWriter getWriter() throws java.io.IOException
If the page is parseable we return an instance of
PageWriter
allowing all data written to stream to be stored in temporary buffer.- Specified by:
getWriter
in interfacejavax.servlet.ServletResponse
- Overrides:
getWriter
in classjavax.servlet.ServletResponseWrapper
- Throws:
java.io.IOException
-
getPageWriter
private PageWriter getPageWriter() throws java.io.IOException
Return instance ofPageWriter
allowing 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 toPageWriter
toPageParser
and return aPage
instance. If thePage
is not parseable, null will be returned.- Throws:
java.io.IOException
-
sendError
public void sendError(int sc) throws java.io.IOException
- Specified by:
sendError
in interfacejavax.servlet.http.HttpServletResponse
- Overrides:
sendError
in classjavax.servlet.http.HttpServletResponseWrapper
- Throws:
java.io.IOException
-
sendError
public void sendError(int sc, java.lang.String msg) throws java.io.IOException
- Specified by:
sendError
in interfacejavax.servlet.http.HttpServletResponse
- Overrides:
sendError
in classjavax.servlet.http.HttpServletResponseWrapper
- Throws:
java.io.IOException
-
sendRedirect
public void sendRedirect(java.lang.String location) throws java.io.IOException
- Specified by:
sendRedirect
in interfacejavax.servlet.http.HttpServletResponse
- Overrides:
sendRedirect
in classjavax.servlet.http.HttpServletResponseWrapper
- Throws:
java.io.IOException
-
-