A nice series of articles.
1) First, it's helpful that you pointed out that an Action might receive a null ActionForm as an input parameter. In reviewing the Struts paradigms, it wasn't obvious how/if struts could "perform" an action without a form. (For example, if for your app's home page, you wanted to load a bean with data but didn't need to process any input.)
2) Second, article 3, page 3 states:
<html:form action="login.action" focus="userName">
"The action that is defined here, login.action, must match an ActionMapping in the struts-config.xml file."
I don't see any "login.action" in the config file. Does it automatically drop off '.action', the servlet-mapping suffix? Is it using the global forward? Or the action path?
From the config file: