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

菜鸟求:struts2中的package与namespace的区别
如题,package 与 namespace 的区别是什么?最好的例子。
分少,不要见怪。

------解决方案--------------------
namespace是C#里面的命名空间,跟java里面的package是一个意思,都是相当于一个文件夹,区别就是一个是c#的,一个是java的...
------解决方案--------------------
namespace决定了action的访问路径,默认为"",可以接收所有路径的action
namespace可以写为/ ,或者/xxx,或者/xxx/yyy,对应的action访问路径
为/index.action,/xxx/index.action,或者/xxx/yyy/index.action

namespace最好也用模块来进行命名

package用来区分重名的情况
namespace必须以/ 开头
------解决方案--------------------
struts2中是采用<package>元素来管理Action的,package的作用类似于java中的类包。
它管理一组业务功能相关的action。而namespace属性可以不配置,主要是为了避免package中的
action重名,还有就是当有namespace时,可以减少配置的书写量,因为相同路径的action请求可以放置在同一个名称空间下,这样就不用每次都写出名称空间值所代表的路径。
最后还说一点,在页面跳转时,struts2自动寻找匹配的action,namespace的优先权大于package.
------解决方案--------------------
namespace这种叫法还是挺霸气的
------解决方案--------------------
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="test1" extends="struts-default" >
<global-results >
<result name="global-exception">/global-exception.jsp</result>
</global-results>
<global-exception-mappings >
<exception-mapping result="global-exception" exception="java.lang.Exception"></exception-mapping>
</global-exception-mappings>
  
  
  
<action name="login" class="cn.cstp.org.action.LoginAction">
<result name="success" type="redirectAction" >${nextAction}</result>
<result name="exception" type="dispatcher" >/exception.jsp</result>
<exception-mapping result="exception" exception="java.sql.SQLException"></exception-mapping>
</action>

<action name="admin" class="cn.cstp.org.action.AdminAction">
<result>/admin.jsp</result>
</action>

<action name="user" class="cn.cstp.org.action.UserAction">
<result>/user.jsp</result>
</action>
</package>
</struts>

好了 这是我的一个项目中的一个struts 配置文件 你可以在里面看到有<package>但是没有namespace 这就是说明我的这个配置文件下面的namespace是空 等同<package name="test1" extends="struts-default" namespace=""> 我访问这个配置文件里面的资源时根本不用去问 <package name="test1">这里面的name是哪家大佛 我只关心namespace是否为空就行了 如果为空 那么我访问package里面的资源的时候直接跳过namespace 如果不为空 那么我在访问 比如里面的Action时候就得加上 比如我访问
<action name="admin" class="cn.cstp.org.action.AdminAction">
<result>/admin.jsp</result>
</action>里面的action http://localhost:8080/progectname/admin.action
如果namespace存在并且为 space 则访问路径 http://localhost:8080/progectname/space/admin.action
不明白再问我
------解决方案--------------------
探讨
<package name="pay" extends="struts-default">


为什么 /pay/queryMyPay.action?userid=1 这个也是正确的?(事实上我程序能找到相应的ACTION)
我在package 里面没有写 namespace .
我改成 /queryMyPay.action?user