Author: fmeschbe
Date: Thu Mar  7 12:17:03 2013
New Revision: 1453801

URL: http://svn.apache.org/r1453801
Log:
SLING-2777 Add sample servlets with Felix SCR annotations (thanks Radu Cotescu 
for the patch)

Modified:
    sling/site/trunk/content/documentation/the-sling-engine/servlets.mdtext

Modified: 
sling/site/trunk/content/documentation/the-sling-engine/servlets.mdtext
URL: 
http://svn.apache.org/viewvc/sling/site/trunk/content/documentation/the-sling-engine/servlets.mdtext?rev=1453801&r1=1453800&r2=1453801&view=diff
==============================================================================
--- sling/site/trunk/content/documentation/the-sling-engine/servlets.mdtext 
(original)
+++ sling/site/trunk/content/documentation/the-sling-engine/servlets.mdtext Thu 
Mar  7 12:17:03 2013
@@ -17,15 +17,54 @@ Servlets can be registered as OSGi servi
 
 A `SlingServletResolver` listens for `Servlet{`}services and - given the 
correct service registration properties - provides the servlets as resources in 
the (virtual) resource tree. Such servlets are provided as `ServletResource` 
instances which adapt to the `javax.servlet.Servlet` class.
 
-For a Servlet registered as an OSGi service to be used by the Sling Servlet 
Resolver, the either or both of the `sling.servlet.paths` or the 
`sling.servlet.resourceTypes` service reference properties must be set. If 
neither is set, the Servlet service is ignored.
+For a Servlet registered as an OSGi service to be used by the Sling Servlet 
Resolver, either or both of the `sling.servlet.paths` or the 
`sling.servlet.resourceTypes` service reference properties must be set. If 
neither is set, the Servlet service is 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.
 
 If `sling.servlet.methods` is not specified, the servlet is only registered 
for handling GET requests. Make sure to list all methods you want to be handled 
by this servlet.
 
+#### Registering a Servlet using Java Annotations
+
+If you are working with the default Apache Sling development stack you can use 
Java Annotations from [Apache Felix Maven SCR 
Plugin](http://felix.apache.org/documentation/subprojects/apache-felix-maven-scr-plugin.html)
 to describe the binding details for your Sling servlets:
+
+1. The `@SlingServlet` annotation
+
+        :::java
+        @SlingServlet(
+            resourceTypes = "sling/servlet/default",
+            selectors = "hello",
+            extensions = "html",
+            methods = "GET")
+        public class MyServlet extends SlingSafeMethodsServlet {
+
+            @Override
+            protected void doGet(SlingHttpServletRequest request, 
SlingHttpServletResponse response) throws ServletException, IOException {
+                ...
+            }
+        }
+
+2. The `@Properties` and `@Property` annotations
+
+        :::java
+        @Component(metatype = true)
+        @Service(Servlet.class)
+        @Properties({
+            @Property(name = "sling.servlet.resourceTypes", value = 
"sling/servlet/default"),
+            @Property(name = "sling.servlet.selectors", value = "hello"),
+            @Property(name = "sling.servlet.extensions", value = "html"),
+            @Property(name = "sling.servlet.methods", value = "GET")
+        })
+        public class MyServlet extends SlingSafeMethodsServlet {
+
+            @Override
+            protected void doGet(SlingHttpServletRequest request, 
SlingHttpServletResponse response) throws ServletException, IOException {
+                ...
+            }
+        }
+
 ### Automated tests
 
-The [launchpad/test-services]({{ 
refs.http://svn.apache.org/repos/asf/sling/trunk/launchpad/test-services/.path 
}}) module contains test servlets that use various combinations of the above 
properties. 
+The [launchpad/test-services]({{ 
refs.http://svn.apache.org/repos/asf/sling/trunk/launchpad/test-services/.path 
}}) module contains test servlets that use various combinations of the above 
properties.
 
 The [launchpad/integration-tests]({{ 
refs.http://svn.apache.org/repos/asf/sling/trunk/launchpad/integration-tests/.path
 }}) module contains a number of tests (like the 
[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.
 
@@ -124,4 +163,4 @@ In this case, the servlet is only select
 
 ## Error Handler Servlet(s) or Scripts
 
-Error handling support is now described on the [Errorhandling]({{ 
refs.errorhandling.path }}) page.
\ No newline at end of file
+Error handling support is now described on the [Errorhandling]({{ 
refs.errorhandling.path }}) page.


Reply via email to