A Sling Servlet in AEM is a Java class that handles HTTP requests and generates HTTP responses. A Sling Servlet is a class that extends the SlingSafeMethodsServlet or SlingAllMethodsServlet classes and is registered as a service with the OSGi framework.
Types of servlets in AEM
In AEM, there are two types of servlets:
- Sling Servlets: Sling Servlets are part of the Sling framework and are the recommended way to handle HTTP requests in AEM. Sling Servlets are registered as OSGi services and are responsible for generating the HTTP response. Sling Servlets can be either
SlingSafeMethodsServlet
orSlingAllMethodsServlet
, depending on whether they support only safe HTTP methods (GET, HEAD) or all HTTP methods, respectively. - Classic Servlets: Classic Servlets are traditional Java Servlets that are registered as OSGi services. Classic Servlets are not part of the Sling framework, but can still be used in AEM if necessary. Classic Servlets can handle both safe and non-safe HTTP methods.
Both types of servlets can be used in AEM, but Sling Servlets are generally preferred because they are more aligned with the Sling framework and offer more functionality out of the box.
Here are the steps to create a Sling Servlet in AEM:
- Create a new Java class that extends either the SlingSafeMethodsServlet or SlingAllMethodsServlet classes.
- Implement the
doGet
ordoPost
method to handle the HTTP requests and generate the HTTP response. - Add the
@SlingServlet
annotation to the class to define the properties of the servlet, such as the URL mappings, resource types, etc. - Register the servlet as an OSGi service in the
src/main/java/META-INF/services
directory.
Here is an example of a simple Sling Servlet in AEM:
@Component(service = Servlet.class, property = { Constants.SERVICE_DESCRIPTION + "=Simple Sling Servlet", "sling.servlet.methods=" + HttpConstants.METHOD_GET, "sling.servlet.paths=" + "/bin/myServlet", "sling.servlet.extensions=" + "json" }) public class SimpleSlingServlet extends SlingSafeMethodsServlet { @Override protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException { response.setContentType("application/json"); response.getWriter().write("{ \"message\": \"Hello World!\" }"); } }
In this example, the @SlingServlet
annotation defines the servlet properties:
sling.servlet.methods
: specifies the HTTP method(s) that the servlet can handle. In this case, it is set toGET
.sling.servlet.paths
: specifies the URL path(s) that the servlet will respond to. In this case, it is set to/bin/myServlet
.sling.servlet.extensions
: specifies the file extension(s) that the servlet will respond to. In this case, it is set tojson
.
Once the servlet is registered as an OSGi service, it will be available at the specified URL path and can handle HTTP requests accordingly.