org.sitemesh.webapp.contentfilter
Class ContentBufferingFilter

java.lang.Object
  extended by org.sitemesh.webapp.contentfilter.ContentBufferingFilter
All Implemented Interfaces:
javax.servlet.Filter
Direct Known Subclasses:
SiteMeshFilter

public abstract class ContentBufferingFilter
extends Object
implements javax.servlet.Filter

Abstract Filter implementation that writes the main content of a response to a temporary buffer where it can then be post-processed before being served.

Subclasses should:

Example

This primitive example creates a Filter that will intercept responses with a MIME type of text/plain, and replace all occurrences of the word 'sheep' with 'cheese'. Yes, it's pointless, but should illustrate usage.

 public class SheepToCheeseFilter extends ContentBufferingFilter {
   public SheepToCheeseFilter() {
     super(new BasicSelector("text/plain"));
   }
   public boolean postProcess(String contentType, CharBuffer buffer,
                              HttpServletRequest request, HttpServletResponse response) {
     String text = buffer.toString();
     if (!text.contains("sheep")) {
       // If no modification is required, returning false will signal
       // ContentBufferingFilter to write the original buffer back out.
       return false;
     }
     text = text.replaceAll("sheep", "cheese");
     response.getWriter().print(text);
     return true;
   }
 }
 

Author:
Joe Walnes, Scott Farquhar

Constructor Summary
protected ContentBufferingFilter(Selector selector)
           
 
Method Summary
protected  void bufferAndPostProcess(javax.servlet.FilterChain filterChain, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, Selector selector)
          Apply next filter/servlet to the buffer, post process the response and send to the real response.
 void destroy()
           
 void doFilter(javax.servlet.ServletRequest servletRequest, javax.servlet.ServletResponse servletResponse, javax.servlet.FilterChain filterChain)
           
protected  ContainerTweaks getContainerTweaks()
           
protected  javax.servlet.FilterConfig getFilterConfig()
           
 void init(javax.servlet.FilterConfig filterConfig)
           
protected  ContainerTweaks initContainerTweaks()
           
protected abstract  boolean postProcess(String contentType, CharBuffer buffer, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, ResponseMetaData responseMetaData)
           
protected  javax.servlet.http.HttpServletRequest wrapRequest(javax.servlet.http.HttpServletRequest request)
          Override to wrap the HttpServletRequest sent to the end point to be buffered.
protected  void writeOriginal(javax.servlet.http.HttpServletResponse response, CharBuffer buffer, HttpServletResponseBuffer responseBuffer)
          Write out the original unmodified buffer.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ContentBufferingFilter

protected ContentBufferingFilter(Selector selector)
Method Detail

postProcess

protected abstract boolean postProcess(String contentType,
                                       CharBuffer buffer,
                                       javax.servlet.http.HttpServletRequest request,
                                       javax.servlet.http.HttpServletResponse response,
                                       ResponseMetaData responseMetaData)
                                throws IOException,
                                       javax.servlet.ServletException
Returns:
Whether the content was processed. If false, the original content shall be written back out.
Throws:
IOException
javax.servlet.ServletException

init

public void init(javax.servlet.FilterConfig filterConfig)
          throws javax.servlet.ServletException
Specified by:
init in interface javax.servlet.Filter
Throws:
javax.servlet.ServletException

destroy

public void destroy()
Specified by:
destroy in interface javax.servlet.Filter

initContainerTweaks

protected ContainerTweaks initContainerTweaks()

getFilterConfig

protected javax.servlet.FilterConfig getFilterConfig()

getContainerTweaks

protected ContainerTweaks getContainerTweaks()

doFilter

public void doFilter(javax.servlet.ServletRequest servletRequest,
                     javax.servlet.ServletResponse servletResponse,
                     javax.servlet.FilterChain filterChain)
              throws IOException,
                     javax.servlet.ServletException
Specified by:
doFilter in interface javax.servlet.Filter
Throws:
IOException
javax.servlet.ServletException

bufferAndPostProcess

protected void bufferAndPostProcess(javax.servlet.FilterChain filterChain,
                                    javax.servlet.http.HttpServletRequest request,
                                    javax.servlet.http.HttpServletResponse response,
                                    Selector selector)
                             throws IOException,
                                    javax.servlet.ServletException
Apply next filter/servlet to the buffer, post process the response and send to the real response.

Throws:
IOException
javax.servlet.ServletException

writeOriginal

protected void writeOriginal(javax.servlet.http.HttpServletResponse response,
                             CharBuffer buffer,
                             HttpServletResponseBuffer responseBuffer)
                      throws IOException
Write out the original unmodified buffer.

Throws:
IOException

wrapRequest

protected javax.servlet.http.HttpServletRequest wrapRequest(javax.servlet.http.HttpServletRequest request)
Override to wrap the HttpServletRequest sent to the end point to be buffered.



Copyright © 2011. All Rights Reserved.