is it "wrong" to think there is a 1-to-1 mapping between a JSP and an Action?
Actually, this is an incorrect assumption. The whole point of having a forward as a separate entity from an action is that a single action does not always forward to the same JSP. In certain situations, a single action could choose between many JSPs to forward to.
Actually, I was being a bit facetious with my amazon.com example. Naturally you will want to name things appropriatedly if only for your own benefit as the developer. I do stand by the point, though, that it's really none of the user's business what's in the URL.
Since you do want your URLs to make at least some sense, the solution is to understand that it's the action that will be in the URL, not the JSP, and name your actions accordingly. I'd suggest naming an action by what it does, rather than by what page it may or may not display.
For example, the action called by login.jsp should not be /loginSuccess or /loginFailure, but /processLogin. Granted, the URL at the top of the login success page is going to say /processLogin instead of /loginSuccess, but at least it makes some sense that what you've just done to get to this point is process the login information. If you called it /loginSuccess and it ended up forwarding to the login failure page because of improper identification, it would make no sense at all.
If you really, really, really care about what's in the URL, one solution is to do "action chaining". Using this technique, you have one action to initialize the page, and a completely separate action to process it. So, instead of foo.do forwarding to bar.jsp and having the URL still show foo.do, you would name the first action fooProcess.do and have it forward to another action (barInit.do) instead of a jsp. That way the URL will read barInit.do when bar.jsp is being displayed.
This link explains how to do it. You will note, however, that the authors of the documentation recommend not doing this. It does fix your URL problem, though.
Am I correct in assuming I would have to code barAction to realize that fooAction never occurred and deal with it?
You are exactly correct in assuming this. It's a pain, huh? That's actually one of the reasons I don't want the URL to make any sense to the user. I don't want the user to mistakenly assume he/she knows what is going on in the application by what's in the URL and then bookmark the page. Bad User!
Seriously, though, most of the applications I write are intended to be accessed only through the welcome page. I understand that in other applications, it may be appropriate for users to bookmark a page or cut and paste the URL into an email. In these cases, you will have to be more concerned about what's in the URL.
Actually, you can relieve some of the tedium of having to check things in every action by creating a base Action class that handles tasks that every action has to do and then extending this class instead of the Struts Action class. For example, if every action has to check to see if the user is logged on or not, you can put this code in the base action class.