Class UrlMapperHandler

  • All Implemented Interfaces:
    Handler

    public class UrlMapperHandler
    extends java.lang.Object
    implements Handler
    Handler for mapping URL's or HTTP headers, or redirecting URLs based on the contents of the current HTTP request. Matches URL's (or arbitrary request properties) against a regexp pattern. If there is a match, the URL (or specified HTTP header) is rewritten or the URL is redirected.

    Properties:

    match
    The regexp to match a url. May contain constructs of the form ${xxx}, which are replaced by the value of request.props for the key xxx
    replace
    The url to replace it with. This may contain both regular expression sub-patterns, such as "\1", or variables of the form ${..} which are replaced with the equivalent request properties.
    export
    If set, use this as a properties prefix, and set request properties for each sub-expression in "match". (E.g. [export]1 [export]2 ...).
    redirect
    If set, the request is redirected instead of being rewritten
    ignoreCase
    If set, the case of the expression is ignored.
    source
    If set, then this string is used instead of the url as the source of the match. Variable substitution using ${xxx} is performed on source, which, if unset, defaults to "${url}". If set, ${} substitutions "method", "url", "protocol", "query", and "serverUrl" are taken from the current Request object. Then names in the Http Request headers are used, then names from the Request.props. The source property is obtained at init time, but evaluated (for ${...}) at every request.

    As an example, the configuration:
    prefix.source=${user-agent}!${url}
    prefix.match=Lynx.*!(.*)
    prefix.replace=/text\\1
    could cause all browsers with "Lynx" in their user agent header to the "text" sub-directory.

    target
    By default, this handler modifies the request URL. If target is specified, it names an HTTP header to be replaced instead of the URL. The "target" is ignored if "redirect" is specified, and a new header is created if the "target" header doesn't already exist.
    Version:
    2.6, 07/03/26
    Author:
    Stephen Uhler
    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
      class  UrlMapperHandler.MapProperties
      Look in a dictionary first, then the provided properties.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      boolean init​(Server server, java.lang.String prefix)
      Initializes the handler.
      boolean respond​(Request request)
      If this request matches the expression, rewrite it.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • UrlMapperHandler

        public UrlMapperHandler()
    • Method Detail

      • init

        public boolean init​(Server server,
                            java.lang.String prefix)
        Description copied from interface: Handler
        Initializes the handler.
        Specified by:
        init in interface Handler
        Parameters:
        server - 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.
        Returns:
        true if this Handler initialized successfully, false otherwise. If false is returned, this Handler should not be used.
      • respond

        public boolean respond​(Request request)
                        throws java.io.IOException
        If this request matches the expression, rewrite it.
        Specified by:
        respond in interface Handler
        Parameters:
        request - The Request object that represents the HTTP request.
        Returns:
        true if the request was handled. A request was handled if a response was supplied to the client, typically by calling Request.sendResponse() or Request.sendError.
        Throws:
        java.io.IOException - if there was an I/O error while sending the response to the client. Typically, in that case, the Server will (try to) send an error message to the client and then close the client's connection.

        The IOException should not be used to silently ignore problems such as being unable to access some server-side resource (for example getting a FileNotFoundException due to not being able to open a file). In that case, the Handler's duty is to turn that IOException into a HTTP response indicating, in this case, that a file could not be found.