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.