日期:2014-05-17  浏览次数:20789 次

确认一下struts2查找aciton的
在struts2的xml配置文件中有可以配置多个package ,并指定namespace。

假如一个URL路径: http://web/path1/path2/path3/123.action

如果在namespace="/path1/path2/path3"的123.action找不到,那么他就到namespace默认空间去找action,
而不会去namespace="/path1/path2" 或namespace="/path1"或根目录namespace="/"去找action,只会直接到默认namespace去找。

如果namespace默认空间没有定义,那么就直接放回找不到action.


上面我在测试了几个对aciton路径的查找的一下认识,不知道正不正确?谢谢...





------解决方案--------------------
Namespace配置(命名空间配置) 
Struts2以命名空间的方式来管理Action,同一个命名空间里不能有同名的Action,不同的命名空间里可以有同名的Action。Struts2不支持为单独的Action设置命名空间,而是通过为包指定namespace属性来为包下面的所有Action指定共同的命名空间。
Namespace将action分成逻辑上的不同模块,每一个模块有自己独立的前缀。使用namespace可以有效的避免action重名的冲突,例如每一个package都可以有自己独立的Menu和Help action,但是事项方式各有不同。Struts2标签带有namespace选项,可以根据namespace的不同向服务器提交不同的package的action的请求。
“/”表示根namespace,所有直接在应用程序上下文环境下的请求(Context)都在这个package中查找。 
“”表示默认namespace,当所有的namespace中都找不到的时候就在这个namespace中寻找

LZ 可参考这个 ^-^
------解决方案--------------------
正确的顺序应该是:
http://web/path1/path2/path3/123.action

先是在namespace="/path1/path2/path3"中查找action,

如果木有,就在namespace="/path1/path2"中查找,

如果木有,就继续namespace="/path1"中查找,

最后是再默认的命名空间中查找namespace="/",

最后的最后要是还没有,就提示说找不到action
------解决方案--------------------
刚才进行测试了一下,我具体解释一下吧。

第一种情况:
如果没有namespace="/path1/path2"和namespace="/path1/path2/path3"的package定义,然后在namespace="/path1"的package里定义了123.action的result,

此时,如果访问".../path1/path2/path3/123.action"、".../path1/path2/123.action"和".../path1/123.action"都能识别到123.action。


第二种情况(应该就是你说的那种了):
定义了namespace="/path1/path2/path3"、namespace="/path1/path2"、namespace="/path1"三个package,并且里面放了分别放了123.action、124.action、125.action,

此时,如果继续访问".../path1/path2/path3/123.action"、".../path1/path2/123.action"和".../path1/123.action",则只有最后一个能识别出来123.action,其他的就不能识别出来。

如果找不到action,则直接进入默认的命名空间中查找,即没有定义package的namespace属性的那个包里查找。

不知道对不对,呵呵,自己测试的
------解决方案--------------------
了解了,谢谢楼主哈