一个较为完整的action定义:

<struts><package name="default" extends="struts-default"><action name="test" class="com.struts2.action.TestAction" method="execute"><result name="success">/index.jsp</result></action></package>
</struts>
import com.opensymphony.xwork2.ActionSupport;public class TestAction extends ActionSupport {private static final long serialVersionUID = 1L;@Overridepublic String execute() throws Exception {System.out.println(TestAction.class.getName() + " 执行了...");return SUCCESS;}}

一、包(package):

Struts2的包类似于Java中的包,包提供了将action、result、result类型、拦截器和拦截器栈组织成为一个逻辑单元的一种方式。与Java不同的是,Struts2中的包可以扩展另外的包(类似于类的继承),从而“继承”原有包所有定义,包括action、result、result类型、拦截器和拦截器栈的配置(引用来自《struts2深入详解》的78页)。

package元素属性
属性 是否必要 说明
name 被其他包引用时的键
extend 指定要扩展的包
namespace 指定命名空间
abstract 声明为抽象包
1、name属性和extend属性:
name属性是包的必要属性(相当于id),指定了包的名字,这个包的名字将作为其他包引用这个包的key,必须唯一。
<package name="aaa" extends="struts-default"><action name="test" class="com.struts2.action.TestAction" method="execute"><result name="success">/index.jsp</result></action>
</package>
<package name="bbb" extends="aaa"></package>

在上述的代码中,name为"bbb"的包继承(extend)name为"aaa"的包,包"bbb"通过继承,即可拥有包"aaa"的action。通过包的继承,优化了代码的重复性,提高了代码的重用性,降低了代码的维护量。

在项目中,一般自定义的包(父包,没有继承别的自定义的包)都是继承"struts-default"包,因为Struts2框架已经为我们提供了大量的拦截器(后面的章节会说明),通过继承该包即可享受该包下定义的拦截器带来的好处。"struts-default"包在struts2-core-2.3.15.1.jar下的struts-default.xml文件中。
2、namespace属性:
package元素的namespace属性可以将包中的action配置为不同的命名空间,这样在不同的命名空间可以存在相同的action,可以达到窄化URL映射的效果。当Struts2接收到一个请求时,它会将URL和namespace/action组成的action完整路径进行比较,如果找到,则将请求交由namespace下的该action进行处理;没有找到,则Struts2会在默认的命名空间中查找;仍然没有找到则会报错误。
当在package中没有声明namespace属性,则该package的命名空间为默认的命名空间,默认(相同)的命名空间中不允许存在相同的两个及以上action。如下面的代码中因为两个package的命名空间都是默认的命名空间,将会报错:
<package name="aaa" extends="struts-default">
    <action name="test" class="com.struts2.action.TestAction" method="execute">
        <result name="success">/index.jsp</result>
    </action>
</package>
<package name="bbb" extends="aaa">
    <action name="test" class="com.struts2.action.TestAction" method="execute">
        <result name="success">/index.jsp</result>
    </action>
</package>

Struts2中存在一个比较特殊的命名空间,根空间即namespace="/",如果请求web应用的上下文路径下的action,那么框架会在根命名空间中查找相应的action,和其他命名空间一样,如果在根路径中找不到请求的action,Struts2框架会去默认的命名空间中查找。

示例:

<package name="aaa" namespace="/aaa" extends="struts-default"><action name="test" class="com.struts2.action.AAAAction" method="execute"><result name="success">/index.jsp</result></action>
</package>
<package name="bbb" namespace="/bbb" extends="struts-default"><action name="test" class="com.struts2.action.BBBAction" method="execute"><result name="success">/index.jsp</result></action>
</package>
<package name="/" namespace="/" extends="struts-default"><action name="test" class="com.struts2.action.RootAction" method="execute"><result name="success">/index.jsp</result></action>
</package>
<package name="default" extends="struts-default"><action name="test" class="com.struts2.action.DefaultAction" method="execute"><result name="success">/index.jsp</result></action>
</package>

上述struts.xml文件中的AAAAction,BBBAction,RootAction,都是由TestAction修改而来的,除了类名不一样外,其余的都一样。

假设访问localhost/struts2_test01/aaa/test.action,将在控制台打印出:com.struts2.action.AAAAction 执行了...

假设访问localhost/struts2_test01/bbb/test.action,将在控制台打印出:com.struts2.action.DefaultAction 执行了...

假设访问localhost/struts2_test01/test.action,将在控制台打印出:com.struts2.action.RootAction 执行了...

假设访问localhost/struts2_test01/abc/test.action,将在控制台打印出:com.struts2.action.DefaultAction执行了...

3、abstract属性:

如果包声明为abstract(即abstract="true"),在包中就无法定义action(即使定义了,也无法进行请求访问),它只能作为“父”包被其他包所继承,"struts-default"包就是一个抽象包。如:

<package name="aaa" namespace="/aaa" extends="struts-default" abstract="true"><action name="test" class="com.struts2.action.AAAAction" method="execute"><result name="success">/index.jsp</result></action>
</package>
<package name="default" extends="struts-default"><action name="test" class="com.struts2.action.DefaultAction" method="execute"><result name="success">/index.jsp</result></action>
</package>

假设访问localhost/struts2_test01/aaa/test.action,将在控制台打印出:com.struts2.action.DefaultAction 执行了...

Struts2-关于struts.xml文件的package配置的说明相关推荐

  1. Struts2-关于struts.xml文件的action配置的说明

    一.Action的说明: Struts2的核心功能就是action,对于开发者,使用Struct2框架的主要工作就是编写Action类来实现业务.action类可以不用继承任何父类和实现任何接口,但是 ...

  2. Struts2配置struts.xml文件

    Struts2配置struts.xml文件 Struts2框架的核心配置文件是struts.xml文件 该文件,主要用来配置Action和请求的对应关系,以及配置逻辑视图和物理视图资源的对应关系 st ...

  3. Struts2的struts.xml的配置细节

    2019独角兽企业重金招聘Python工程师标准>>> (七)Struts2的struts.xml的配置细节 这里说的struts.xml说到的包含内容如下: 1.include包含 ...

  4. Struts2的struts.xml的配置细节,OGNL,标签

    2019独角兽企业重金招聘Python工程师标准>>> (七)Struts2的struts.xml的配置细节 这里说的struts.xml说到的包含内容如下: 1.include包含 ...

  5. struts2中struts.xml和web.xml文件解析及工作原理

    转自:https://www.cnblogs.com/printN/p/6434526.html web.xml <?xml version="1.0" encoding=& ...

  6. Struts2的2.5.10版本找不到StrutsPrepareAndExecuteFilter过滤器 与 struts.xml文件通配符异常问题

    一.异常描述: 今天在整合ssh的时候,在配置Struts2框架之后,启动之后,项目报错抛异常:主要异常信息如下: java.lang.ClassNotFoundException: org.apac ...

  7. 解决Struts2的配置文件struts.xml文件无提示问题

    1.在上一篇文章Struts2搭建开发环境并编写第一个Struts2应用 中,详细的图解介绍了如何搭建Struts2开发环境和编写第一个Struts2应用,其中struts2的配置文件struts.x ...

  8. struts2:struts.xml配置文件详解

    1. 几个重要的元素 1.1 package元素 package元素用来配置包.在Struts2框架中,包是一个独立的单位,通过name属性来唯一标识包.还可以通过extends属性让一个包继承另一个 ...

  9. 【struts2】struts2配置文件—struts.xml

    解决在断网环境下,配置文件无提示的问题: 我们可以看到Struts.xml在断网的情况下,前面有一个叹号,这时,我们按alt+/ 没有提示,这是因为" http://struts.apach ...

最新文章

  1. 结合深度学习的图像修复怎么实现?
  2. SpringMVC+Apache Shiro+JPA(hibernate)案例教学(二)
  3. Wordpress会员插件 wp_members 最新简体中文语言包
  4. 安卓文件共享服务器,安卓文件共享云服务器
  5. 学习笔记-记ActiveMQ学习摘录与心得(二)
  6. 云原生DevOps的5步升级路径
  7. flask-Blueprint
  8. 雷林鹏分享:Laravel 安装
  9. 如何提高Eclipse的运行速度 之总结
  10. TSSD2018下载地址及更新说明
  11. 李宏毅机器学习笔记第5周_逻辑回归
  12. android记账系统预算功能,怎么挑选合适的 Android 记账应用?你可以从记账需求入手...
  13. 每日作业-品优购详情页
  14. 期待只在最美的时光遇见你
  15. Python编程:从入门到实践第二版答案(第七章)
  16. 一般信道容量迭代算法c语言,(信息论编码)信道容量迭代算法
  17. Excel 2019筛选快捷键(Ctrl+Shift+L)失灵
  18. 超详细的张飞硬件90天读书笔记02
  19. 虚证、实证如何鉴别?
  20. 软件工程复试归纳总结

热门文章

  1. 利用python解决猴子吃桃问题
  2. Android4.0的来电拦截源码
  3. 身份和访问管理IAM能力之RADIUS认证
  4. java缓存Guava Cache用法介绍
  5. 爬取华农兄弟哔哩哔哩所有视频信息
  6. 2.2集合之间的交集与并集
  7. 算法之unix时间戳和UTC时间(年月日)互换
  8. php java session共享_PHP通过session id 实现session共享和登录验证的代码
  9. python中使用什么命令安装组件_对Python开发环境在线安装Jupyter组件时,以下哪些指令是符合语法规范的:_________...
  10. Windows Media Player + 音乐可视化 + 音乐倒放