菜鸟求:struts2中的package与namespace的区别

上山浦鱼 2011-11-04 11:54:08
如题,package 与 namespace 的区别是什么?最好的例子。
分少,不要见怪。
...全文
715 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Zeus 2011-11-05
  • 打赏
  • 举报
回复
namespace是设置访问路径的,

package就是个包名。
crazywolf 2011-11-05
  • 打赏
  • 举报
回复
package 就像一个文件夹,它下面包含什么不受其它的影响,namespace是访问时的路径!
a_mean 2011-11-05
  • 打赏
  • 举报
回复
struts2中是采用<package>元素来管理Action的,package的作用类似于java中的类包。
它管理一组业务功能相关的action。而namespace属性可以不配置,主要是为了避免package中的
action重名,还有就是当有namespace时,可以减少配置的书写量,因为相同路径的action请求可以放置在同一个名称空间下,这样就不用每次都写出名称空间值所代表的路径。
最后还说一点,在页面跳转时,struts2自动寻找匹配的action,namespace的优先权大于package.
多云转大雨 2011-11-05
  • 打赏
  • 举报
回复
namespace决定了action的访问路径,默认为"",可以接收所有路径的action
namespace可以写为/ ,或者/xxx,或者/xxx/yyy,对应的action访问路径
为/index.action,/xxx/index.action,或者/xxx/yyy/index.action

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

package用来区分重名的情况
namespace必须以/ 开头
云鹏 2011-11-05
  • 打赏
  • 举报
回复
namespace是C#里面的命名空间,跟java里面的package是一个意思,都是相当于一个文件夹,区别就是一个是c#的,一个是java的...
Lucky_BW 2011-11-05
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 pkh198504 的回复:]
<package name="pay" extends="struts-default">


为什么 /pay/queryMyPay.action?userid=1 这个也是正确的?(事实上我程序能找到相应的ACTION)
我在package 里面没有写 namespace .
我改成 /queryMyPay.action?userid=1 ,也可能执行。
为什么呢?
[/Quote]
2L的已经说明了,之于你说的这个问题,它首先会在namespace为pay下搜索,找不到就会向上级搜索。所以你这样写也是能找到
annan211 2011-11-05
  • 打赏
  • 举报
回复
<?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
不明白再问我
上山浦鱼 2011-11-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ithink_88 的回复:]
namespace是C#里面的命名空间,跟java里面的package是一个意思,都是相当于一个文件夹,区别就是一个是c#的,一个是java的...
[/Quote]

哦,这样啊。
但我说的是 struts2中的,也就是 struts.xml配置文件中的
上山浦鱼 2011-11-05
  • 打赏
  • 举报
回复
<package name="pay" extends="struts-default">


为什么 /pay/queryMyPay.action?userid=1 这个也是正确的?(事实上我程序能找到相应的ACTION)
我在package 里面没有写 namespace .
我改成 /queryMyPay.action?userid=1 ,也可能执行。
为什么呢?
dracularking 2011-11-05
  • 打赏
  • 举报
回复
namespace这种叫法还是挺霸气的
上山浦鱼 2011-11-05
  • 打赏
  • 举报
回复
好。大概清楚了。

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧