Shao Fan

关于JAVA与软件工程
posts - 31, comments - 71, trackbacks - 0, articles - 4
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

Cannot find action mapping??

Posted on 2006-03-01 10:44 shaofan 阅读(1925) 评论(5)  编辑  收藏 所属分类: Java

        今天试着把大虾写的系统登录模块加到我们现有的模块里来,他写的时候因为有些试验的成分,所以没有按照我们项目的配置来写,也没有按照我们的模块来划分配置,加过来以后重新配置了模块信息,结果居然无法正常运行。显示错误:“cannot retrieve action mapping  。废了九牛二虎之力,都无法解决。web.xml、struts-config、模块配置,一切看起来都无比的正常,但就是运行不了。真搞不清楚是哪里出了问题。还以为搞不定,晚上要加班了,谁知道,踏破铁鞋无觅处,柳暗花明又一村,在google上搜索关键字"action mapping 找不到",第一个链接居然就是问题的答案!(还从来没有只点一次就可以找到问题答案的经验,所以兴奋无比^O^)

        总的来说,问题的原因就在于,struts是在第一次收到对action的请求(注意:不包括jsp的请求)时,提取这个请求的url的路径信息,把相应模块的mapping信息设置到请求中去。如果在进入一个模块时,第一次访问的是一个jsp页面,而在这个jsp页面中提交到该模块的一个action,就会出现找不到action mapping的情况。这就是因为,在进到这个模块时,访问的是jsp,这个模块的任何一个action都没有被访问到,所以struts的ActionServlet还没有来得及把这个模块的mapping设置到请求中,自然找不到该模块的action。

        因此,这就引出一个约定,就是系统中尽量避免对Jsp的直接访问,如果要访问也要通过action来forward。虽然看起来麻烦一点,但是安全性、健壮性都会有所提高。

        关于以上提到的模块mapping的设置原理,具体的文章在这里(不长),值得收藏:

        原文链接:http://202.100.72.44/news/itschool/pro/pro44134.htm


评论

# re: Cannot find action mapping??  回复  更多评论   

2006-05-24 08:47 by swads
具体怎么解决啊?

# re: Cannot find action mapping??  回复  更多评论   

2006-05-24 17:50 by shaofan
@swads
解决方法就是,第一次访问一个模块时,要通过.do而不是JSP来访问,以使它的模块配置被加载进来。

# re: Cannot find action mapping??  回复  更多评论   

2006-07-23 09:30 by Hanson Hsu
但是我通过.do去访问还是存在这个问题。可能是structs的BUG吧

# re: Cannot find action mapping??  回复  更多评论   

2006-12-26 10:38 by OK
测过,用.do 访问可行,谢谢楼主

# re: Cannot find action mapping??  回复  更多评论   

2008-05-15 11:36 by Mikey
在你处理的Action文件中加入一个方法
public ActionForward index(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws ServletException {
return mapping.findForward("welcome");
}
然后在sturts-config.xml或多模块配置文件中的action设置中加入一个forward属性到你的第一个页面

只有注册用户登录后才能发表评论。


网站导航: