Sling resolution cheatsheet
Purpose: One-page lookup for URL decomposition, script selection and resolution debugging.
Who this page is for
| Audience | Why it matters to you |
|---|---|
| All engineers | Pin this next to your monitor for the first month |
URL decomposition
/content/phi/plans/gold-hospital.compare.premium.html/2026/07?src=email
ββββββββββββββββ¬βββββββββββββββ ββββββββ¬ββββββββ βββ¬ββββββ¬ββββββββ¬ββββ
resource path selectors ext suffix query
Script selection (inside the resolved component)
Given resourceType phi/components/planpage, request selectors compare.premium, extension html β candidates in priority order:
compare/premium.htmlorcompare.premium.html(all selectors)compare.html(first selector)planpage.html(component default)- Same walk on each
sling:resourceSuperTypeancestor
More selector matches beat fewer; deeper (more specific) beats shallower.
Resolution debugging tools
| Tool | URL | Use |
|---|---|---|
| Resolver console | /system/console/jcrresolver | Trace any URL β resource + script |
| Recent requests | /system/console/requests | Full decomposition of recent request processing |
| Servlet resolver | append .servletresolver.json-style checks via console | Which servlet would handle it |
Gotchas
| Symptom | Cause |
|---|---|
| Selector script ignored | Script name/extension mismatch, or resourceType actually different (check jcrresolver) |
| Wrong component renders | sling:resourceType on the content node isn't what you think |
| Works on author, 404 on publish | Dispatcher filter or missing content/ACL on publish |
| Infinite variants cached | Any selector renders and caches β see Dispatcher security for locking down selectors |