struts2中配置文件里的package元素和namespace属性的区别?

下面是一个struts.xml的配置文件

<struts>
    <package name="example" namespace="/example" extends="struts-default">
    	<action name="hello" class="com.yanln.test.action.HelloWorld">
    		<result name="success">success.jsp</result>
    	</action>
    </package>
</struts>

 

struts2中采用<package>元素来管理Action,通过它来管理一组业务功能相关的action,元素中的name属性用来标识包的名称,不同的包中可以有同名的action, 但是这些同名的action在访问时怎么来区分访问的是哪个包中的action呢?

 

首先:访问时通过package元素中的name属性值来区分是不起作用的,因为package元素只能在配置文件中来表示不同模块的action属于不同的包,至于怎么访问到不同模块下的action是由namespace来决定的。

 

其次:重点说下namespace,package元素中的namespace属性是用来设置访问路径的,不是必须配置的,默认是“”,代表可以接收所有路径的action, namespace可以写为“/”, 或者“/xxx” 等,对应的action访问路径为“/hello.action”, "/xxx/hello.action"。

 

最后:举个例子说明namespace的作用其实主要在于区分不同package中的同名action的访问问题。

<package name="a" namespace="/a" extends="struts-default">
    	<action name="hello" class="com.yanln.test1.HelloWorld">
    		<result name="success">success.jsp</result>
    	</action>
</package>
    
<package name="b" namespace="/b" extends="struts-default">
    	<action name="hello" class="com.yanln.test2.HelloWorld">
    		<result name="success">success.jsp</result>
    	</action>
</package>

 

说明:a包中有个hello, b包中有个hello, 我想访问b包中的hello,action的访问路径就可以这样写“/b/hello.aciton” 。

 

你可能感兴趣的:(struts2)