Conceptual Question : When do we use servlets and when do we use sling models? | Community
Skip to main content
Level 4
February 23, 2023
Solved

Conceptual Question : When do we use servlets and when do we use sling models?

  • February 23, 2023
  • 2 replies
  • 1218 views

I was asked in an interview : When do we use servlets and when do we use sling models?

Can someone please help me out with the answer? Thanks!

This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.
Best answer by SivakumarKanoori

@arindam6600 :

 

@SlingModel: 

Sling Models are "pure" POJOs which maps Sling objects (resources, request objects etc.).

 They allow you to map resource properties, assign default values, inject OSGi services and much more.

 

Predominently, if you want to use the property values in Sightly , you can use data-sly-use and call the slingmodel to retrive the property values, while retrieving you can make changes to the values if needed. 

We are using @Model annotation to specify that this model class is a Sling Model. Each data member is annotated with @Inject. This class will be mapped to a resource in JCR. 

 

 

 

@sling servlet : 

Sling servlet can be registered by using paths or resourceType.

 

Sling servlet are basically used when front end developers need to make ajax call and want to get response in form of json

2
3
4
5
6
7
8
9
10
11
12
13
$.ajax({
    type : "GET",
    url : '/bin/custom/path',
    /*data : {
        pass your request parameter here, currently we are not passing any data
    },*/
    success : function(data, textStatus, jqXHR) {
        //write your logic that you need to perform on sucess
                },
    error : function(XMLHttpRequest, textStatus, errorThrown) {
        //write your logic that you need to perform on error
    }
});

 

@SuppressWarnings("serial")
@SlingServlet(paths = "/bin/custom/path")
public class SimpleServlet extends SlingSafeMethodsServlet {
}
 

 

 

2 replies

Manu_Mathew_
Community Advisor
Community Advisor
February 23, 2023

@arindam6600 A Servlet is used to extend the capabilities of servers that host applications accessed by means of a request-response programming model. In AEM you can extend SlingSafeMethodsServlet for read-only implementation or SlingAllMethodsServlet in order to implement all RESTful operations. Sling Servlets has doGet(..) and doPost() methods.

 

Sling Models are annotation-driven Java POJOs that facilitate the mapping of data from the JCR to Java variables. In AEM you have Resouces.class and SlingHttpServletRequest.class as adaptable - When using Resource you can access the JCR resource without a UI in mind and when using request you can also access request-info. Sling model has @PostConstruct that gets called when the component is loaded.

 

Hope this helps!

SivakumarKanoori
Community Advisor
SivakumarKanooriCommunity AdvisorAccepted solution
Community Advisor
February 23, 2023

@arindam6600 :

 

@SlingModel: 

Sling Models are "pure" POJOs which maps Sling objects (resources, request objects etc.).

 They allow you to map resource properties, assign default values, inject OSGi services and much more.

 

Predominently, if you want to use the property values in Sightly , you can use data-sly-use and call the slingmodel to retrive the property values, while retrieving you can make changes to the values if needed. 

We are using @Model annotation to specify that this model class is a Sling Model. Each data member is annotated with @Inject. This class will be mapped to a resource in JCR. 

 

 

 

@sling servlet : 

Sling servlet can be registered by using paths or resourceType.

 

Sling servlet are basically used when front end developers need to make ajax call and want to get response in form of json

2
3
4
5
6
7
8
9
10
11
12
13
$.ajax({
    type : "GET",
    url : '/bin/custom/path',
    /*data : {
        pass your request parameter here, currently we are not passing any data
    },*/
    success : function(data, textStatus, jqXHR) {
        //write your logic that you need to perform on sucess
                },
    error : function(XMLHttpRequest, textStatus, errorThrown) {
        //write your logic that you need to perform on error
    }
});

 

@SuppressWarnings("serial")
@SlingServlet(paths = "/bin/custom/path")
public class SimpleServlet extends SlingSafeMethodsServlet {
}
 

 

 

Thanks,Siva