๐ Apache Sling in AEM โ Request Processing & URL Resolution Explained
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
| Part | Meaning |
| Resource Path | /content/mysite/en/home โ JCR node |
| Selectors | selector1.selector2 โ optional |
| Extension | html, json, xml |
| Suffix | extra path info |
| Query Params | normal 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.
| URL | Script Used |
/home.html | page.html |
/home.mobile.html | page.mobile.html |
/home.data.json | page.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
| Concept | Meaning |
| Resource | Abstraction of JCR node |
| ResourceResolver | API to access resources |
| ResourceType | Component used for rendering |
| Overlay | /apps overrides /libs |
| Selectors | Change rendering |
| Adaptation | resource.adaptTo(Model.class) |
๐งโ๐ป Sling Servlets (Two Types)
โ Resource-Bound Servlet (Recommended)
Based on resourceType
Respects permissions
Follows Sling architecture
โ Path-Bound Servlet (Avoid)
Hardcoded path
/bin/xyzBypasses 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.