You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@sling.apache.org by Justin Edelson <ju...@justinedelson.com> on 2010/06/21 15:41:57 UTC

Fwd: [CONF] Apache Sling Website > Servlets

Anyone have any great ideas on how to fix broken links to the integration tests now that they were moved into a separate module? I fear my confluence-fu isn't up to the task.

Justin

Begin forwarded message:

> From: confluence@apache.org
> Date: June 21, 2010 9:40:00 AM EDT
> To: commits@sling.apache.org
> Subject: [CONF] Apache Sling Website > Servlets
> Reply-To: dev@sling.apache.org
> 
> Servlets
> Page edited by Justin Edelson
> Comment: fixing link to old testing module
> 
> Changes (1)
> ...
> The [launchpad/test-services|http://svn.apache.org/repos/asf/sling/trunk/launchpad/test-services/] module contains test servlets that use various combinations of the above properties. 
> 
> The [launchpad/testing|http://svn.apache.org/repos/asf/sling/trunk/launchpad/testing/] [launchpad/integration-tests|http://svn.apache.org/repos/asf/sling/trunk/launchpad/integration-tests/]module contains a number of tests (like the[ExtensionServletTest|http://svn.apache.org/repos/asf/sling/trunk/launchpad/testing/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/servlets/resolution/ExtensionServletTest.java][ExtensionServletTest|http://svn.apache.org/repos/asf/sling/trunk/launchpad/integration-tests/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/servlets/resolution/ExtensionServletTest.java] for example) that verify the results. 
> 
> Such tests run as part of our continuous integration process, to demonstrate and verify the behavior of the various servlet registration mechanisms, in a way that's guaranteed to be in sync with the actual Sling core code. If you have an idea for additional tests, make sure to let us know! 
> ...
> Full Content
> Servlets and Scripts
> Servlets can be registered as OSGi services. The following service reference properties are defined for Servlets defined as OSGi services of type javax.servlet.Servlet:
> 
> Name	Description
> sling.servlet.paths	A list of absolute paths under which the servlet is accessible as a Resource. The property value must either be a single String, an array of Strings or a Vector of Strings.
> sling.servlet.resourceTypes	The resource type(s) supported by the servlet. The property value must either be a single String, an array of Strings or a Vector of Strings. This property is ignored if the sling.servlet.paths property is set.
> sling.servlet.selectors	The request URL selectors supported by the servlet. The selectors must be configured as they would be specified in the URL that is as a list of dot-separated strings such as <em>print.a4</em>. The property value must either be a single String, an array of Strings or a Vector of Strings. This property is ignored if the sling.servlet.paths property is set.
> sling.servlet.extensions	The request URL extensions supported by the servlet for GET requests. The property value must either be a single String, an array of Strings or a Vector of Strings. This property is ignored if the sling.servlet.pathsproperty is set or other methods than GET are declared in sling.servlet.methods.
> sling.servlet.methods	The request methods supported by the servlet. The property value must either be a single String, an array of Strings or a Vector of Strings. This property is ignored if the sling.servlet.paths property is set.
> sling.servlet.prefix	The absolute prefix to make relative paths absolute. This property is a String and is optional. If it is not set, the actual prefix used is derived from the search path of the ResourceResolver at the time of registration.
> A SlingServletResolver will listen for Servletservices and - given the correct service registration properties - provide the servlets as resources in the (virtual) resource tree. Such servlets are provided as ServletResource instances which adapt to thejavax.servlet.Servlet class.
> 
> For a Servlet registered as an OSGi service to be used by the Sling Servlet Resolver, the following restrictions apply:
> 
> Either the sling.servlet.paths or the sling.servlet.resourceTypes service reference property must be set. If neither is set, the Servlet service is ignored.
> If the sling.servlet.paths property is set, all other sling.servlet.* properties are ignored.
> Each path to be used for registration - either from the sling.servlet.paths property or constructed from the other sling.servlet.* properties - must be absolute. Any relative path is made absolute by prefixing it with a root path. This prefix may be set with the sling.servlet.prefix service registration property. If this property is not set, the first entry in the ResourceResolver search path for the ResourceResolver.getResource(String) method is used as the prefix. If this entry cannot be derived, a simpe slash - / - is used as the prefix.
> 
> Automated tests
> The launchpad/test-services module contains test servlets that use various combinations of the above properties.
> 
> The launchpad/integration-tests module contains a number of tests (like the ExtensionServletTest for example) that verify the results.
> 
> Such tests run as part of our continuous integration process, to demonstrate and verify the behavior of the various servlet registration mechanisms, in a way that's guaranteed to be in sync with the actual Sling core code. If you have an idea for additional tests, make sure to let us know!
> 
> Example: Registration by Path
> sling.servlet.paths = \[ "/libs/sling/sample/html", "/libs/sling/sample/txt" \]
> sling.servlet.resourceTypes = \[ "sling/unused" \]
> sling.servlet.selectors = \[ "img" \]
> sling.servlet.extensions = \[ "html", "txt", "json" \]
> A Servlet service registered with these properties is registered under the following paths:
> 
> /libs/sling/sample/html
> /libs/sling/sample/txt
> The registration properties sling.servlet.resourceTypes, sling.servlet.selectors and sling.servlet.extensions are ignored because the sling.servlet.paths property is set.
> 
> Example: Registration by Resource Type etc.
> sling.servlet.resourceTypes = \[ "sling/unused" \]
> sling.servlet.selectors = \[ "img", "tab" \]
> sling.servlet.extensions = \[ "html", "txt", "json" \]
> A Servlet service registered with these properties is registered under the following paths:
> 
> prefix/sling/unused/img/html
> prefix/sling/unused/img/txt
> prefix/sling/unused/img/json
> prefix/sling/unused/tab/html
> prefix/sling/unused/tab/txt
> prefix/sling/unused/tab/json
> As explained the Servlet is registered for each permutation of the resource types, selectors and extension. See above For an explanation of how prefix is defined.
> 
> Scripts are Servlets
> The Sling API defines a SlingScript interface which is used to represent (executable) scripts inside of Sling. This interface is implemented in the scripting/core bundle in the DefaultSlingScript class which also implements thejavax.servlet.Servlet.
> 
> To further simplify the access to scripts from the Resource tree, the scripting/core bundle registers an AdapterFactory to adapt Resources to Scripts and Servlets (the SlingScriptAdapterFactory). In fact the adapter factory returns instances of the DefaultSlingScript class for both Scripts and Servlets.
> 
> From the perspective of the Servlet resolver, scripts and servlets are handled exactly the same. In fact, internally, Sling only handles with Servlets, whereas scripts are packed inside a Servlet wrapping and representing the script.
> 
> Default Servlet(s)
> As explained in the Resolution Process section above, a default Servlet is selected if no servlet (or script) for the current resource type can be found. To make the provisioning of a default Servlet as versatile as provisioning per resource type Servlets (or scripts), the default Servlet is selected with just a special resource type sling/servlet/default.
> 
> The actual Servlet or Script called as the default Servlet is resolved exactly the same way as for any resource type. That is, also for the default Servlet selection, the request selectors and extension or method are considered. Also, the Servlet may be a Servlet registered as an OSGi service or it may be a Script stored in the repository or provided by any bundle.
> 
> Finally, if not even a registered default Servlet may be resolved for the request, because none has been registered, the servlets/resolver bundle provides a fall back the DefaultServlet with the following functionality:
> 
> If an NonExistingResource was created for the request the DefaultServlet sends a 404 (Not Found)
> Otherwise the DefaultServlet sends a 500 (Internal Server Error), because normally at least a NonExistingResource should be created
> OptingServlet interface
> If a registered servlet implements the OptingServlet interface, Sling uses that servlet's accepts(SlingHttpServletRequest request) method to refine the servlet resolution process.
> 
> In this case, the servlet is only selected for processing the current request if its accept method returns true.
> 
> Error Handler Servlet(s) or Scripts
> Error handling support is now described on the Errorhandling page.
> 
> Change Notification PreferencesView Online | View Changes | Add Comment