How AEM Fits Together
If you’re coming from a typical web stack, the closest analogy is: Author is your CMS admin and staging environment in one; Publish is your production web server; Dispatcher is the CDN/reverse-proxy cache sitting in front of it. A content change only reaches real visitors once it’s copied (“replicated”) from Author to Publish, and even then, Dispatcher’s cache has to be told to drop its old copy before that change is actually visible — which is why “I published it but the site still shows the old version” is almost always a Dispatcher problem, not a content problem.
Underneath both Author and Publish sits JCR, the repository — every
page, component, and asset is a node in one big tree, addressed by a path
much like a file path. Sling is what turns an incoming request URL into
one of those nodes and picks a script to render it. That script is almost
always a component: an HTL template (the view) paired with a cq:dialog
(the form an author fills in) and, for anything non-trivial, a Sling
Model (a small Java class that hands the template already-computed data).
That’s the whole loop: an author edits component instances on a page in Author, using dialogs backed by JCR properties; Sling resolves each request to those nodes and their templates; and once published, Dispatcher decides whether Publish even needs to do that work again for the next visitor. Every category on this page is one piece of that loop, in roughly the order you’d meet them building a first component: the repository these pieces live in, then components and templates themselves, then Sling’s resolution and authoring layers, then how it all reaches a real visitor.
The big picture before the details: what Author, Publish, and Dispatcher each do, and where JCR, Sling, and components sit inside that.
- Author
- The instance where content is created and edited — never seen directly by real visitors
- Publish
- The instance that serves the live site — only shows content explicitly sent to it from Author
- Dispatcher
- A cache sitting in front of Publish — like a CDN — so most visitor requests never reach Publish at all
- JCR
- The repository both Author and Publish store content in — one big tree of nodes, similar to a filesystem
- Sling
- The framework that turns an incoming URL into a JCR node, then picks a script to render it