Struts2的命名空间与后缀设置

[b]一、怎么用命名空间,为什么要用?[/b]
Struts2的命名空间在struts.xml中的package中配制

<package name="semcolon" extends="struts-default" namespace="/userMag">

他的好处在于,当两个不同的应用要用到一个数据库操作时,可以很好的把业务逻辑给区分开

比如BLOG文章的删除,作者可以对该文章可以做删除操作,但是管理员也会有这个权限,哪么我可以定义两个包,分别用于文章管理和系统管理

用户管理

<package name="semcolon.bloagmag" extends="struts-default" namespace="/blogMag">
<action name="delBlog" class="semcolon.blogmag.BlogMag">
<result>/WEB-INF/jsp/comm/success.jsp</result>
</action>

</package>

系统管理

<package name="semcolon.systemmag" extends="struts-default" namespace="/systemMag">
<action name="delBlog" class="semcolon.systemMag.BlogMag">
<result>/WEB-INF/jsp/comm/success.jsp</result>
</action>

</package>


相对DAO来说,不同的是用户管理只能一次删一条,而系统管理可以删多条,这完全可以使用一个DAO的操作来完成,别的事都属于业务层的事了,如使用<include>,哪么就更方便了,我们可以大胆的在每个不同的模块下定义相同的应用名

[b]二、命名空间寻找Action的优先级[/b]
在命名空间下如找不到定义的action哪么是不是直接跳到WEB容器中的错误页面中了呢?
我能给的答案是 NO,我也测试过,struts2他自己会先进行处理

先在当前的命名空间中寻找,如没有找到,哪么会直接跳到默认的命名空间中寻找

问题又出现了,默认的命名空间在哪里?
当在package标签下没有设置命名空间时,也就是没有定义namespace时,该package下所有action定义都会存放在默认的命名空间下,OK给个例子吧

<package name="semcolon" extends="struts-default">
<action name="*" class="com.opensymphony.xwork2.ActionSupport"/>
<result>/WEB-INF/jsp/test/MyJsp3.jsp</result>
</action>
</package>

<package name="test1" extends="struts-default" namespace="/login/test">
<action name="userLoginAction" class="com.opensymphony.xwork2.ActionSupport">
<result>/WEB-INF/jsp/test/MyJsp1.jsp</result>
</action>
</package>


<package name="test2" extends="struts-default" namespace="/login">
<action name="loginAction" class="com.opensymphony.xwork2.ActionSupport">
<result>/WEB-INF/jsp/test/MyJsp2.jsp</result>
</action>
</package>

当访问http://localhost:8080/test/login/test/loginAction.action时,
会在test1包中找,如没有找到,他不会在test2中找,他会直接跳到semcolon中寻找

[color=red][b]注:这里在semcolon中定义的Action中,name定义为“*”,结合命名空间这种机制可以带来很大的方便,因为定义为"*"的action,将接收所有struts2处理的未定义的请求[/b][/color]

虽然我在网上也看到过如当前访问的命名空间中没有找到相应的action,他会到上一级的命名空间中寻找(如/login/test中没有找到,会跳到/login中寻找),但经我测试,这种方式不成功,希望看到这文章的人,也来测试下,看看你们的结果是不是和我一样

3、关于后缀设置
访问的后缀设置一般都在struts.xml中或是设置在struts.properties中

<constant name="struts.action.extension" value="do"></constant>


struts.action.extension=do

如想设置多个后缀可以使用“,”分割
但有个问题,如果用户访问了一个错误地址,且没有使用struts2中定义的后缀,哪么会跳转到WEB容器中定义的错误页面,OK,也许我们可以使用手动设置容器的这个页面要解决掉,但是我在使用Spring MVC时,可以不使用后缀,这样也有好处,像安全级别高的,不想给后缀用户(非恶意用户也不需要知道这些),或我想全部请求都要经过struts2来处理。对于这样的需求,这样一定无法满足,后经过我测试,可以这样来设置

<constant name="struts.action.extension" value=""></constant>

对,就是什么也不写,一个空(struts2有默认值的,值为action,所以一定要手动设置一下)
结合默认命名空间定义的名为"*"的action,就可以完成了,如自己在加工一下,可以得到更友好的返回页面


好了,完了,我的文字表达能力不是很好,文章有点流水的意思,见谅
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值