[
https://issues.apache.org/jira/browse/SLING-64?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12535735
]
Torgeir Veimo commented on SLING-64:
------------------------------------
How about abstracting this a bit, instead of relying on servlets to say
themselves if they can handle a request, to use factories, or rather, mappers.
A manager would resolve a request to a sling servlet by iterating through its
configured mappers and stopping once a suitable sling servlet is found. If no
mapper resolves a servlet, the default sling servlet is called.
public interface ServletMapper {
public SlingServlet findServlet(SlingServletRequest request, Resource
resource) throws Exception;
}
A configuration file would specify the order of the mappers, along with any
configuration parameters each mapper needs. (A simple digester implementation
would allow configuration parameters to be set using reflection.)
A default mapper which maps to servlets based on url and/or jcr node type or
resource type can be provided which would be sufficient in most cases. For
specific needs a sling api user would implement his own mapper.
Sitemesh uses a similar setup with great success for decorating web pages based
on any combination of url patterns, request parameters and others. I'm using
such a mapper approach successfully in our own prototype crm framework.
> Refactor Servlets and Script resolution
> ---------------------------------------
>
> Key: SLING-64
> URL: https://issues.apache.org/jira/browse/SLING-64
> Project: Sling
> Issue Type: Improvement
> Components: microsling
> Reporter: Felix Meschberger
> Fix For: 2.0.0
>
> Attachments: SLING-64.patch
>
>
> microsling currently defines a SlingServlet interface which has a canProcess
> method used to decide whether a servlet is capable of handling a request or
> not. I think, this mechanism will not scale well if we add more script
> engines or more servlets.
> As a first step towards a simpler approach, I propose the following:
> * Merge the DefaultSlingServlet and the SlingPostServlet to a single
> DefaultSlingServlet
> * Replace Rhino and Velocity servlets by respective ScriptEngines (and
> define the interface for that)
> * Refactor the SlingScriptResolver such that after resolving the script,
> it is also evaluated through a ScriptEngine
> * Refactor MicroSlingServlet such, that
> (1) check for a servlet by resource type
> (2) try to evaluate a script
> (3) fall back to the DefaultSlingServlet
> * Also in the MicroSlingServlet register servlets by type (currently there
> are none of course)
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.