Expand my Community achievements bar.

SOLVED

How to define a servlet path using the new servlet annotations?

Avatar

Level 9

The new way to annotate servlets is like this:

 

@component(service = { Servlet.class })
@SlingServletResourceTypes(
    resourceTypes="/apps/my/type", 
    methods= "GET",
    extensions="html",
    selectors="hello")
public class MyServlet extends SlingSafeMethodsServlet {

    @Override
    protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {
        ...
    }
}

 

 

How can one register by path, not by resource type?

 

The documenation:

 

https://sling.apache.org/documentation/the-sling-engine/servlets.html

 

Has no info on this,it mentions "sling.servlet.paths" but his is the old way, not the new way?

1 Accepted Solution

Avatar

Correct answer by
Level 9

Ok, found the solution:

@SlingServletPaths(value="/bin/somepath")
private class MyServlet extends SlingAllMethodsServlet

View solution in original post

2 Replies

Avatar

Community Advisor

Hi,

 

You can use below syntax for registering the servlet with paths

 

@Component(service = Servlet.class,

        property = {

                Constants.SERVICE_DESCRIPTION + "=Some Description",

                "sling.servlet.methods=" + HttpConstants.METHOD_GET,

                "sling.servlet.paths=" + "/bin/somepath",

                "sling.servlet.extensions=json" 

        })

 

You can use the resourceType also to bind the servlet to a path

 

@component(service = Servlet.class, property = { Constants.SERVICE_DESCRIPTION + "=Some Description",

"sling.servlet.methods=" + HttpConstants.METHOD_POST,

"sling.servlet.resourceTypes=apps/servlets/sometext" })

 

Create a node under content folder and add the resourceType as given in the servlet and hitting the page url will trigger the servlet.

 

Url to trigger the servlet: http://localhost:4502/content/wknd-events/servlet_nodes/servlets/newservlet

 

Screen Shot 2021-04-20 at 1.35.40 PM.png

Hope this helps

 

Avatar

Correct answer by
Level 9

Ok, found the solution:

@SlingServletPaths(value="/bin/somepath")
private class MyServlet extends SlingAllMethodsServlet