1. The stack is just a stack of objects.
  2. Initially the stack contains the Action executed (this is why as you say value="foo" calls action.getFoo())
  3. New objects are placed onto the stack during the body of various tags (like <ww:iterator> or <ww:property> for example)
  4. Using the expression language you can navigate UP the stack (ie ../ to move up the stack, / to root an expression from the top of the stack)
  5. Using the expression language you can navigate DOWN the object graph from any point on the stack (ie / to move down the object's methods)

How is that for a brief primer? Anyone have any other rules to add?