001: /*
002: * ========================================================================
003: *
004: * Copyright 2001-2003 The Apache Software Foundation.
005: *
006: * Licensed under the Apache License, Version 2.0 (the "License");
007: * you may not use this file except in compliance with the License.
008: * You may obtain a copy of the License at
009: *
010: * http://www.apache.org/licenses/LICENSE-2.0
011: *
012: * Unless required by applicable law or agreed to in writing, software
013: * distributed under the License is distributed on an "AS IS" BASIS,
014: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015: * See the License for the specific language governing permissions and
016: * limitations under the License.
017: *
018: * ========================================================================
019: */
020: package org.apache.maven.cactus.sample;
021:
022: import java.io.IOException;
023: import java.io.OutputStream;
024:
025: import javax.servlet.Filter;
026: import javax.servlet.FilterChain;
027: import javax.servlet.FilterConfig;
028: import javax.servlet.ServletException;
029: import javax.servlet.ServletRequest;
030: import javax.servlet.ServletResponse;
031: import javax.servlet.http.HttpServletResponse;
032:
033: import org.apache.maven.cactus.sample.util.GenericResponseWrapper;
034:
035: /**
036: * Sample filter that implements some very simple business logic. The goal is
037: * to provide some functional tests for Cactus and examples for Cactus users.
038: * This filter simply adds a header and a footer to the returned HTML.
039: *
040: * @version $Id: SampleFilter.java 238815 2004-02-29 16:34:44Z vmassol $
041: */
042: public class SampleFilter implements Filter {
043: /**
044: * We need to save the filter config as the Fitler API does not offer
045: * a means to get the filter config ... except in the <code>init()</code>
046: */
047: private FilterConfig config;
048:
049: /**
050: * Filter initialisation. Called by the servlet engine during the life
051: * cycle of the filter.
052: *
053: * @param theConfig the filter config
054: *
055: * @exception ServletException on failure
056: */
057: public void init(FilterConfig theConfig) throws ServletException {
058: this .config = theConfig;
059: }
060:
061: /**
062: * Perform the filter function. Called by the container upon a request
063: * matching the filter pattern defined in <code>web.xml</code>.
064: *
065: * @param theRequest the incmoing HTTP request
066: * @param theResponse the returned HTTP response
067: * @param theChain the chain of filters extracted from the definition
068: * given in <code>web.xml</code> by the container.
069: *
070: * @exception ServletException on failure
071: * @exception IOException on failure
072: */
073: public void doFilter(ServletRequest theRequest,
074: ServletResponse theResponse, FilterChain theChain)
075: throws IOException, ServletException {
076: OutputStream out = theResponse.getOutputStream();
077:
078: addHeader(out);
079:
080: // Create a wrapper of the response so that we can later write to
081: // the response (add the footer). If we did not do this, we would
082: // get an error saying that the response has already been
083: // committed.
084: GenericResponseWrapper wrapper = new GenericResponseWrapper(
085: (HttpServletResponse) theResponse);
086:
087: theChain.doFilter(theRequest, wrapper);
088:
089: out.write(wrapper.getData());
090: addFooter(out);
091: out.close();
092: }
093:
094: /**
095: * Write the header to the output stream. The header text is extracted
096: * from a filter initialisation parameter (defined in
097: * <code>web.xml</code>). Don't write anything if no parameter is defined.
098: *
099: * @param theOutputStream the output stream
100: *
101: * @exception IOException on failure
102: */
103: protected void addHeader(OutputStream theOutputStream)
104: throws IOException {
105: String header = this .config.getInitParameter("header");
106:
107: if (header != null) {
108: theOutputStream.write(header.getBytes());
109: }
110: }
111:
112: /**
113: * Write the footer to the output stream. The footer text is extracted
114: * from a filter initialisation parameter (defined in
115: * <code>web.xml</code>). Don't write anything if no parameter is defined.
116: *
117: * @param theOutputStream the output stream
118: *
119: * @exception IOException on failure
120: */
121: protected void addFooter(OutputStream theOutputStream)
122: throws IOException {
123: String footer = this .config.getInitParameter("footer");
124:
125: if (footer != null) {
126: theOutputStream.write(footer.getBytes());
127: }
128: }
129:
130: /**
131: * Filter un-initialisation. Called by the servlet engine during the life
132: * cycle of the filter.
133: */
134: public void destroy() {
135: }
136: }
|