| java.lang.Object sunlabs.brazil.filter.FilterHandler
FilterHandler | public class FilterHandler implements Handler(Code) | | The FilterHandler captures the output of some
Handler and then applies an number of
sunlabs.brazil.filter.Filter Filters to change that output
before it is returned to the client.
This handler provides one of the core services now associated with
the Brazil Server: the ability to dynamically rewrite web content
obtained from an arbitrary source.
For instance, the FilterHandler can be used as a proxy for
a PDA. The wrapped Handler would go to the web to
obtain the requested pages on behalf of the PDA. Then, a
Filter would examine all "text/html" pages and rewrite the
pages so they fit into the PDA's 200 pixel wide screen. Another
Filter would examine all requested images and dynamically
dither them to reduce the wireless bandwidth consumed by the PDA.
The following configuration parameters are used to initialize this
Handler :
-
prefix
- Only URLs beginning with this string will be candidates for
filtering. The default is "/".
-
handler
- The name of the
Handler whose output will be captured
and then filtered. This is called the "wrapped handler".
-
filters
- A list of
Filter names. The filters are applied in
the specified order to the output of the wrapped handler.
-
exitOnError
- If set, the server's
initFailure will set
any of the filters fail to
initialize. No handler prefix is required.
A sample set of configuration parameters illustrating how to use this
handler follows:
handler=filter
port=8081
filter.class=sunlabs.brazil.filter.FilterHandler
filter.handler=proxy
filter.filters=noimg
proxy.class=sunlabs.brazil.proxy.ProxyHandler
noimg.class=sunlabs.brazil.filter.TemplateFilter
noimg.template=sunlabs.brazil.template.NoImageTemplate
These parameters set up a proxy server running on port 8081. As with a
normal proxy, this proxy server forwards all HTTP requests to the target
machine, but it then examines all HTML pages before they are returned to
the client and strips out all <img> tags. By applying
different filters, the developer could instead build a server
- to automatically dither embedded images down to grayscale (instead
of simply stripping them all out)
- to apply pattern recognition techniques to strip out only the
advertisements
- to examine and change arbitrary URLs on the page
- to extract the content from an HTML page and dynamically combine it
with another file to produce a different look-and-feel.
author: Stephen Uhler (stephen.uhler@sun.com) author: Colin Stevens (colin.stevens@sun.com) version: 1.17 01/01/14 |
Method Summary | |
public boolean | init(Server server, String prefix) Start the handler and filter classes. | public boolean | respond(Request request) Responds to an HTTP request by the forwarding the request to the
wrapped Handler and filtering the output of that
Handler before sending the output to the client.
At several stages, the Filters are given a chance to
short-circuit this process:
- Each
Filter is given a chance to examine the
request before it is sent to the Handler . |
init | public boolean init(Server server, String prefix)(Code) | | Start the handler and filter classes.
|
respond | public boolean respond(Request request) throws IOException(Code) | | Responds to an HTTP request by the forwarding the request to the
wrapped Handler and filtering the output of that
Handler before sending the output to the client.
At several stages, the Filters are given a chance to
short-circuit this process:
- Each
Filter is given a chance to examine the
request before it is sent to the Handler . The
Filter may decide to change the request's properties.
A Filter may even return some content to the client now,
in which case, neither the Handler nor any further
Filter s are invoked at all.
- After the
Handler has generated the response headers,
but before it has generated any content, each Filter is
asked if it would be interested in filtering the content. If no
Filter is, then the subsequent content from the
Handler will be sent directly to the client.
- On the other hand, if any
Filter is interested
in filtering the content, then the output of the Handler
will be sent to each of the interested Filter s in order.
The output of each interested Filter is sent to the
next one; the output of the final Filter is sent to
the client. At this point, any one of the invoked Filter s
can decide to reject the content completely, instead of rewriting it.
Parameters: request - The HTTP request to be forwarded to one of the sub-servers. true if the request was handled and contentwas generated, false otherwise. throws: IOException - if there was an I/O error while sending the response tothe client. |
|
|