| 
 |   | ||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||
java.lang.Object | +--sunlabs.brazil.filter.FilterHandler
The FilterHandler captures the output of another 
 Handler and allows the ouput to
 be modified. One or more
 Filters
 may be specified 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: 
MatchString).
 handler
 Handler whose output will be captured
	and then filtered.  This is called the "wrapped handler".  
 filters
 Filter names.   The filters are applied in
	the specified order to the output of the wrapped handler.
 exitOnError
 initFailure will set
	any of the filters fail to 
	initialize.  No handler prefix is required.
 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.NoImageTemplateThese 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 responnd
  for a more detailed explaination.
| Field Summary | |
|  Filter[] | filters | 
|  Handler | handler | 
| Constructor Summary | |
| FilterHandler() | |
| Method Summary | |
|  boolean | init(Server server,
     String prefix)Start the handler and filter classes. | 
|  boolean | respond(Request request)Responds to an HTTP request by the forwarding the request to the wrapped Handlerand filtering the output of thatHandlerbefore sending the output to the client. | 
| Methods inherited from class java.lang.Object | 
| equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait | 
| Field Detail | 
public Handler handler
public Filter[] filters
| Constructor Detail | 
public FilterHandler()
| Method Detail | 
public boolean init(Server server,
                    String prefix)
init in interface Handlerserver - The HTTP server that created this Handler.
		Typical Handlers will use Server.props
		to obtain run-time configuration information.prefix - The handlers name.
		The string this Handler may prepend to all
		of the keys that it uses to extract configuration information
		from Server.props.  This is set (by the Server
		and ChainHandler) to help avoid configuration parameter
		namespace collisions.
true if this Handler initialized
		successfully, false otherwise.  If
		false is returned, this Handler
		should not be used.
public boolean respond(Request request)
                throws IOException
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: 
Filter is given a chance to examine the
 request before it is sent to the Handler
 by invoking its respond() method.  The
 Filter may decide to change the request's properties.  
 A Filter may even return some content to the client now,
 by (calling request.sendResponse() and
 returning true),
 in which case, neither the Handler nor any further
 Filters are invoked at all.
 handler's respond() 
 method is called, and is expected to generate content.
 If no content is generated at this step,
  this handler returns false.
 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.
 Filter is interested
 in filtering the content, then the output of the Handler
 will be sent to each of the interested Filters 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.
 Filters
 can decide to reject the content completely, instead of rewriting it.
 Filter for a description of how to cause filters
 to implement the various behaviors defined above.
respond in interface Handlerrequest - The HTTP request to be forwarded to one of the sub-servers.
true if the request was handled and content
		was generated, false otherwise.
IOException - if there was an I/O error while sending the response to
		the client.| 
 | Version 2.1, Generated 12/30/04 Copyright (c) 2001-2004, Sun Microsystems. | ||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||