[ 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.