jsr372-experts@javaserverfaces-spec-public.java.net

[jsr372-experts] Exact mapping [Spec PDF]

From: arjan tijms <arjan.tijms_at_gmail.com>
Date: Thu, 12 Jan 2017 23:33:30 +0100

Hi,

For issue 1260 I've added basic awareness for the so-called "exact
mapping", meaning when the FacesServlet has as url pattern for a servlet
mapping like "/foo".

The most important JavaDoc for it is in this commit (in our private repo
which is already pushed to the java.net repo as well):

https://github.com/jsf-spec/mojarra/commit/fd56d980b9df4d8d8f579c510620466fc2062426

See Resource#getRequestPath

     * <div class="changed_added_2_3">
     * <p>If exact mapped, <em>result</em> must be the following if and only
     * if the FacesServlet is mapped to the exact URL pattern {_at_link
     * ResourceHandler#RESOURCE_IDENTIFIER} + {_at_link #getResourceName}
     * </p>
     *
     * <blockquote>
     * <p><code>result = <em>contextRoot</em> + {_at_link
     * ResourceHandler#RESOURCE_IDENTIFIER} + {_at_link
#getResourceName}</code></p>
     * </blockquote>
     *
     * <p>If exact mapped, and the FacesServlet is <em>not</em> mapped to
the exact
     * URL pattern {_at_link ResourceHandler#RESOURCE_IDENTIFIER} + {_at_link
#getResourceName}
     * do the following:
     * </p>
     *
     * <p>
     * Retrieve the existing mappings of the FacesServlet, e.g. using
     * {_at_link ServletRegistration#getMappings()}, and from those pick any
     * prefix mapping or extension mapping. If no such mapping is found,
     * throw an {_at_link IllegalStateException}. If such mapping is found
remove
     * the <code>*</code> character from that mapping, take that as the new
     * <em>facesServletMapping</em> and continue with evaluating this
mapping
     * as specified below for <em>if prefix mapped</em> and for
     * <em>if extension mapped</em>
     * </div>

The JavaDoc for the ViewHandler doesn't spell out the requirements in the
JavaDoc, but points to JSF.7.6.2, so I'll send the text for that
momentarily.

Kind regards,
Arjan Tijms