Struts 2.0 ---struts.xml 核心配置说明
Struts 框架的核心配置文件就是 struts.xml 配置文件,该文件主要负责管理 Struts 2 框架的业务控制器 Action。
在默认情况下,Struts 2 框架将自动加载放在 WEB-INF/classes 路径下的 struts.xml文件。所以在第一篇文章中,新建struts.xml时,要求一定要建立在src目录下,该目录下的内容在开发中会被复制到 WEB-INF/classes 目录下(.java文件不会被复制过去,编译好后的.class文件直接被创建在那里面, myeclipse下的web project是这样的) .
struts.xml 的根元素是struts
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"struts-2.0.dtd">
<!-- 根元素是Struts -->
<struts>
</struts>
其中最重要的元素是package,是根元素struts的子元素
package是action元素的父元素
Java代码
<struts>
<package>
<action name="" />
<!-- ******************************************** -->
</struts>
使用 include 的好处: 当我们开发一个项目,配置文件肯定会写一大堆,如果写在一个配置文件里一定冗长,查看和修
改都不方便,所以使用include把配置文件分开来便于查找和修改,完全有理由让struts.xml仅仅是作为一个目录来使用
,至于其它配置文件的分配,可以根据模块也可以根据功能来划分
package,先给出package的定义
package是把actions,results,result types,interceptors和stacks分组成逻辑单元的一种方式
,以分享一些共同设置,包跟对象一样可以扩展,也可以被"子"包覆盖部分属性
从以上定义我们可以看出package不仅是作为逻辑分隔,而且还能具有继承的特性
name属性仅仅是个代号(id),我们可以随边取,只要不冲突(不重复),而extends代表继承其它的包
里面填参数是其它包的name属性
namespace代表名称空间,namespace的作用是控制相应package下的action的url地址,有点象java的classpath
abstract,这个和我们写java的abstract类一样,就是让人家来继承的 只有name是必需的
extends也是必需的,因为我们需要从struts2默认载入的struts-default.xml
文件的struts-default包中继承一些东西,有兴趣可以解压struts2-core-2.0.9.jar找到struts-defautl.xml查看内容
<package name="lee" namespace="/admin" extends="struts-default">
action,action是struts2的基础"工作单元",一个action一般就是一个请求(或点击按钮或提 交表单),action元素有两部分,一个友好的名字(URL相关,如Login.action)和一个负责"处理"的类
<!--
name表示*.action前面那部分这里即是表示Conf.action
class表示使用哪个类来处理此请求
method 是可选属性,表示使用哪个方法来处理, 如果缺此项默认调用类中的execute()方法 也可以有其他方法,要调用的方法必需符合以下三个条件 1 是public 2 返回String 3 没有参数
-->
<action name="Conf" method="方法名">
</action>
result,result是Action执行后返回的字符串 。
<!-- 基本形式 -->
<result name="success" type="dispatcher">
<param name="location">/conf/welcome.jsp</param>
</result>
<!--
如果location是唯一的参数,象上面这个,还可以改写为下面形式 如果result标签对中间没有 param 标签,就把result标签对中间 的文本作为location
-->
<result name="success" type="dispatcher">/conf/welcome.jsp</result>
<!-- 如果type是"dispatcher",类似于servlet标准中ServletDispatcher的forward-->
<result name="success">/conf/welcome.jsp</result>
<!-- 如果name是"success",还可以继续简化 -->
<result>/conf/welcome.jsp</result>
在这种情况下,我们就可以使用全局result,下面我们来看看其定义
Struts2 允许你为所有Action配置定义一些默认的result映射,它会自动的被这个包中的所有Action以及
扩展包继承,换句话说,如果你在多个Action中使用相同的result映射,你可以把它配置成全局的result
这里做个比喻,package就相当于java的类(class),全局result就相当于类中的成员变量,result就相当于成员方法,所有成员方法都能使用成员变量类可以继承其它类
<!-- ******************************************** -->
<global-results>
<result name="error">/conf/error.jsp</result>
</global-results>
<!-- ******************************************** -->