[
https://issues.apache.org/jira/browse/SLING-387?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12594193#action_12594193
]
Bertrand Delacretaz commented on SLING-387:
-------------------------------------------
Added ScriptSelectionTest in revision 653378, with the testHtmlPostSelectors
commented out as it fails.
> Simplify script paths and names
> -------------------------------
>
> Key: SLING-387
> URL: https://issues.apache.org/jira/browse/SLING-387
> Project: Sling
> Issue Type: Bug
> Components: Scripting, ServletResolver
> Reporter: Felix Meschberger
> Assignee: Felix Meschberger
> Fix For: 2.0.0
>
> Attachments: SLING387.patch, SLING387.patch
>
>
> According to the findings in the dev list thread "Simplifying script paths
> and names?" at [1] I would now like to propose the implementation of this
> change in script/servlet path resolution:
> Note: This issue talks about scripts. But as servlets are mirrored into the
> virtual Resource Tree accessible through the ResourceResolver, servlets are
> treated exactly the same as scripts (or vice-versa actually). So the
> discussion applies to servlets as well as to scripts.
> (1) Script Location
> Scripts to handle the processing or a resource are looked up in a single
> location:
> {scriptPathPrefix}/{resourceTypePath}
> Where {scriptPathPrefix} is an absolute path prefix (as per
> ResourceResolver.getSearchPath()) to get absolute paths and
> {resourceTypePath} is the resource type converted to a path. If the
> {resourceTypePath} is actually an absolute path, the {scriptPathPrefix} is
> not used.
> Example: Given the search path [ "/apps", "/libs" ] and a resource type of
> sling:sample, the following locations will be searched for scripts:
> * /aps/sling/script
> * /libs/sling/script
> (2) Within the location(s) found through above mechanism a script is searched
> whose script name matches the pattern
>
> {resourceTypeLabel}.{selectorString}.{requestMethod}.{requestExtension}.{scriptExtension}
> where the fields have the following meaning:
> {resourceTypeLabel} - the last segment of the {resourceTypePath} (see
> above)
> This part is required. Only scripts whose name starts
> with this name are considerd
> {selectorString} - the selector string as per
> RequestPathInfo.getSelectorString
> This part is optional. The more selectors of the selector
> string match, the
> better.
> {requestMethod}
> The request method name. This is optional for GET or HEAD
> requests
> and is required for non-GET/non-HEAD requests
> {requestExtension}
> The extension of the request. This is optional.
> {scriptExtension}
> The extension indicating the script language. Not used
> for selecting
> the script but for selecting the ScriptEngine. This is
> of course not existing
> for servlets.
> If multiple scripts would apply for a given request, the script with the best
> match is selected. Generally speaking a match is better if it is more
> specific. More in detail, a match with more selector matches is better than a
> match with less selector matches, regardless of any request extension or
> method name match.
> For example, consider a request to resource /foo/bar.print.a4.html of type
> sling:sample. Assuming we have the following list of scripts in the correct
> location:
> (1) sample.esp
> (2) sample.GET.esp
> (3) sample.GET.html.esp
> (4) sample.html.esp
> (5) sample.print.esp
> (6) sample.print.a4.esp
> (7) sample.print.html.esp
> (8) sample.print.GET.html.esp
> (9) sample.print.a4.html.esp
> (10) sample.print.a4.GET.html.esp
> It would probably be (10) - (9) - (6) - (8) - (7) - (5) - (3) - (4) - (2) -
> (1). Note that (6) is a better match than (8) because it matches more
> selectors even though (8) has a method name and extension match where (6)
> does not.
> If there is a catch, e.g. between print.esp and print.jsp, the first script
> in the listing would be selected (of course, there should not be a catch...)
> [1] http://markmail.org/message/odduiwskv7ogdtz2
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.