struts2中Action的name 和package的name和namespace是什么作用

本文深入解析Struts2的struts.xml配置,包括name、namespace、Action与package的使用及意义,通过实例展示如何灵活运用这些元素实现Web应用的高效开发。

在struts2的 struts.xml 配置中 例:

Xml代码 复制代码  收藏代码
  1. <package name="strutsX" namespace="/mystruts" extends="struts-default">  
  2.       <action name="sum" class="action.FirstAction">  
  3.           <result name="positive">/positive.jsp</result>  
  4.           <result name="negative">/negative.jsp</result>  
  5.       </action>  
  6.  </package>  


name="strutsX
name="sum"
namespace="/mystruts"
----------------------------
1.package中的name只是一个标识,你可以随意命名,其他的配置文件可以继承这个package.比如例子中的strutsX就是继承了spring-core-2.0.5.jar 包里的 struts-default.xml中的名为struts-default 的 package;
struts-default.xml 中的 struts-default 的 package

Xml代码 复制代码  收藏代码
  1. <package name="struts-default" abstract="true">  
  2.     ...   
  3. </package>  
2.action中的name对应你页面中的一个action跳转,比如你页面有个表单提交: 
    <form action="struts.xml中action里的name"> 

3.namespace是用于区分包中相同的类,如果没写,说明该包为默认空间,如果写了(如你的这个例子),那么就说明包struts2的空间为/mystruts。 
namespace实际上是在包的基础上对Action的进一步组织和划分,可以解决Action重名问题,因为在不同的命名空间中是可以有相同的Action名的,就好比一班有个叫张三的,二班也有个叫张三的,当我们呼叫某个张三时,就得带上“命名空间”,Action也是如此,例子的sum就必须通过 /mystruts/sum.action的方式来进行调用。
### Struts2 中 `<action>` 标签的 `name`、`method` `class` 属性含义及对应关系 #### 1. `name` 属性 `name` 是 `<action>` 标签的核心属性之一,用于定义该动作在 URL 请求中的唯一标识。它决定了客户端如何通过 HTTP 请求访问对应的 Action 类及其方法[^2]。 例如: ```xml <action name="student" class="com.example.StudentAction"> <result>/WEB-INF/pages/students.jsp</result> </action> ``` 在这个例子中,`name="student"` 表明当用户发送如下请求时: ``` http://localhost:8080/system/student ``` Struts2 将调用 `StudentAction` 类实例,并执行其默认方法(通常是 `execute()` 方法)[^3]。 --- #### 2. `class` 属性 `class` 属性指定了与当前 `<action>` 关联的具体 Action 类名称。这个类负责处理用户的请求并返回适当的结果视图[^3]。 继续以上面的例子为例: ```xml <action name="student" class="com.example.StudentAction"> <result>/WEB-INF/pages/students.jsp</result> </action> ``` 这里 `class="com.example.StudentAction"` 明确指出,对于名为 `student` 的请求,应该创建 `com.example.StudentAction` 实例来响应请求[^2]。 如果没有显式设置 `class` 属性,默认会尝试寻找一个无参构造函数的对象实例化过程。 --- #### 3. `method` 属性 `method` 属性允许开发者指定某个特定的方法去处理请求,而不是依赖默认的 `execute()` 方法。这提供了更大的灵活性,尤其是在单个 Action 类需要支持多种业务逻辑的情况下[^2]。 示例代码片段: ```xml <action name="addStudent" class="com.example.StudentAction" method="add"> <result name="success">/WEB-INF/pages/addSuccess.jsp</result> </action> <action name="deleteStudent" class="com.example.StudentAction" method="delete"> <result name="success">/WEB-INF/pages/deleteSuccess.jsp</result> </action> ``` 在此配置下: - 当用户访问 `http://localhost:8080/system/addStudent` 时,将调用 `StudentAction.add()` 方法; - 访问 `http://localhost:8080/system/deleteStudent` 则触发 `StudentAction.delete()` 方法[^3]。 如果不指定 `method` 属性,则默认调用 `execute()` 方法。 --- ### 总结三者的关系 | 属性 | 描述 | |----------|----------------------------------------------------------------------------------------| | `name` | 定义了 URL 请求路径的最后一部分,用来匹配具体的 Action 配置项 | | `class` | 指定处理请求的实际 Action 类 | | `method` | 可选参数,用于进一步细化到具体的方法级别,而非仅限于默认的 `execute()` 方法 | 它们共同协作完成了从 URL 请求到服务器端逻辑处理的过程[^1]^。 --- ### 示例代码展示 下面是一个完整的 XML 配置案例,展示了三个属性之间的配合使用: ```xml <package name="examplePackage" namespace="/example" extends="struts-default"> <!-- 默认情况 --> <action name="defaultAction" class="com.example.DefaultAction"> <result name="success">/WEB-INF/example/default.jsp</result> </action> <!-- 自定义 Method --> <action name="customMethodAction" class="com.example.CustomAction" method="processRequest"> <result name="success">/WEB-INF/example/custom.jsp</result> </action> <!-- 复杂场景:通配符 + 动态 Method --> <action name="*_*" class="com.example.{1}Action" method="{2}"> <result name="success">/WEB-INF/{1}/{2}.jsp</result> </action> </package> ``` --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值