Skip to main content

Command Palette

Search for a command to run...

๐Ÿ”— Apache Sling in AEM โ€” Request Processing & URL Resolution Explained

Published
โ€ข4 min read

Chapter 4 of AEM Learning Series โ€” How AEM turns URLs into HTML pages.


โšก What Sling Does (In One Line)

Apache Sling maps a URL โ†’ to a JCR node โ†’ then finds the script that renders it.

This is the core engine of request processing in AEM.


๐Ÿ†š Sling vs Traditional Web Frameworks

Traditional MVC (Django / Express)

URL โ†’ Route โ†’ Controller โ†’ Fetch Data โ†’ Template โ†’ HTML
Code decides what to render

Apache Sling (AEM)

URL โ†’ JCR Node โ†’ sling:resourceType โ†’ Script โ†’ HTML
Content decides what to render

๐Ÿ‘‰ This is called Content-Driven Rendering.


๐Ÿงฉ URL Anatomy in Sling (Must Memorize)

http://localhost:4502/content/mysite/en/home.selector1.selector2.html/suffix?key=value
                     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
                          RESOURCE PATH       SELECTOR   SELECTOR   EXT   SUFFIX  QUERY
PartMeaning
Resource Path/content/mysite/en/home โ†’ JCR node
Selectorsselector1.selector2 โ†’ optional
Extensionhtml, json, xml
Suffixextra path info
Query Paramsnormal URL params

๐Ÿ”„ Sling Request Processing Flow (Must Know)

User requests:

http://localhost:4502/content/mysite/en/home.html

Step-by-step

1๏ธโƒฃ URL Decomposition

/content/mysite/en/home + .html

2๏ธโƒฃ Find JCR Node

Sling looks up resource in repository.

3๏ธโƒฃ Read sling:resourceType

mysite/components/page

4๏ธโƒฃ Find Rendering Script

/apps/mysite/components/page/page.html

5๏ธโƒฃ Execute Script

HTL renders HTML.

6๏ธโƒฃ Return Response

Browser receives page.


๐ŸŽฏ What Are Selectors?

Selectors allow multiple representations of same content.

URLScript Used
/home.htmlpage.html
/home.mobile.htmlpage.mobile.html
/home.data.jsonpage.json

Same content โ†’ different output.


๐Ÿ”Ž Sling Script Resolution Order

Example:

resourceType = mysite/components/page
selector = mobile
extension = html

Sling searches in this order:

1. /apps/.../mobile.html
2. /apps/.../page.mobile.html
3. /apps/.../page.html
4. /libs/.../page.html
5. sling:resourceSuperType chain
6. Default servlet

๐Ÿ“ /apps vs /libs (Overlay Mechanism)

When Sling searches for a component:

1๏ธโƒฃ /apps/mysite/components/page   โ† YOUR CODE
2๏ธโƒฃ /libs/mysite/components/page   โ† AEM CORE

๐Ÿ‘‰ /apps overrides /libs.

Never edit /libs.


๐Ÿง  Key Sling Concepts

ConceptMeaning
ResourceAbstraction of JCR node
ResourceResolverAPI to access resources
ResourceTypeComponent used for rendering
Overlay/apps overrides /libs
SelectorsChange rendering
Adaptationresource.adaptTo(Model.class)

๐Ÿง‘โ€๐Ÿ’ป Sling Servlets (Two Types)

  • Based on resourceType

  • Respects permissions

  • Follows Sling architecture

โŒ Path-Bound Servlet (Avoid)

  • Hardcoded path /bin/xyz

  • Bypasses permissions

  • Security risk


๐Ÿšจ Critical Rules

Always close ResourceResolver
Always use /apps (not /libs)
Prefer resource-bound servlets
Never leave sessions open

Unclosed ResourceResolver โ†’ AEM crash.


๐Ÿง  Quick Recap

Sling = URL โ†’ JCR Node โ†’ resourceType โ†’ Script โ†’ HTML
Content-driven rendering
Selectors change output
/apps overlays /libs
Always close ResourceResolver

๐ŸŽฏ Interview Questions โ€” Apache Sling (25 Q&A)


๐ŸŸข Basics

Q1. What is Apache Sling?
Content-centric web framework mapping URLs to JCR resources.

Q2. Sling request flow?
URL โ†’ Resolve resource โ†’ resourceType โ†’ script โ†’ response.

Q3. sling:resourceType?
Component responsible for rendering content.

Q4. URL anatomy?
/path.selector.extension/suffix?params

Q5. Selector?
Changes rendering script.

Q6. Sling Resource?
Abstraction of content node.

Q7. ResourceResolver?
API to access resources.


๐Ÿ”ต Intermediate

Q8. Script resolution?
resourceType โ†’ selectors โ†’ extension โ†’ /apps โ†’ /libs.

Q9. Sling vs MVC?
Content-driven vs route-driven.

Q10. Overlay mechanism?
/apps overrides /libs.

Q11. sling:resourceSuperType?
Component inheritance.

Q12. resourceType vs superType?
Direct mapping vs fallback.

Q13. Sling Servlet?
Java request handler.

Q14. Path vs resource servlet?
Resource-bound preferred.

Q15. Resource not found?
sling:nonexisting โ†’ 404.

Q16. SlingHttpServletRequest?
Extended request object.

Q17. Resource adaptation?
resource.adaptTo() โ†’ Sling Model.


๐Ÿ”ด Advanced

Q18. Script resolution order?
Selector โ†’ component โ†’ /apps โ†’ /libs โ†’ superType.

Q19. SlingMainServlet?
Entry point for requests.

Q20. request vs resolver resource?
Current vs any path.

Q21. Sling mappings?
URL rewriting via /etc/map.

Q22. Sling Exporter?
Sling Models โ†’ JSON.

Q23. POST handling?
SlingDefaultPostServlet.

Q24. Safe vs AllMethodsServlet?
Read vs read/write.

Q25. Why close ResourceResolver?
Prevent session leaks.


๐ŸŽ‰ Final Summary

If JCR stores content and OSGi runs AEMโ€ฆ
๐Ÿ‘‰ Sling is what actually serves pages.

More from this blog