struts2.xml配置文件

来源:互联网 发布:2016淘宝客服电脑配置 编辑:程序博客网 时间:2024/05/06 12:45

Struts2中的Action采用了低侵入式的设计,Struts2不要求Action类继承任何的Struts2的基类或实现Struts2接口。(但是,我们为了方便实现Action,大多数情况下都会继承com.opensymphony.xwork2.ActionSupport类,并重写此类里的public String execute() throws Exception方法。因为此类中实现了很多的实用接口,提供了很多默认方法,这些默认方法包括获取国际化信息的方法、数据校验的方法、默认的处理用户请求的方法等,这样可以大大的简化Action的开发。)
Struts2中通常直接使用Action来封装HTTP请求参数,因此,Action类里还应该包含与请求参数对应的属性,并且为属性提供对应的getter和setter方法。(当然,Action类中还可以封装处理结果,把处理结果信息当作一属性,提供对应的getter和setter方法)
Struts2框架有两个核心配置文件,其中struts.xml文件主要负责管理应用中的Action映射, 及Action处理结果和物理资源之间的映射关系。除此之外,Struts2框架还包含了一个struts.properties文件,该文件主义了Struts2框架的大量常量属性。但通常推荐也是在struts.xml文件中来配置这些常量属性。


在默认情况下,Struts2框架将自动加载放在WEB-INF/classes路径下的struts.xml文件。为了避免随着应用规模的增加,而导致的struts.xml文件过于庞大,臃肿,从而是该文件的可读性下降。我们可以将一个struts.xml配置文件分解成多个配置文件,然后在struts.xml文件中包含其他配置文件。 

<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd" ><struts>    <!-- include节点是struts2中组件化的方式 可以将每个功能模块独立到一个xml配置文件中 然后用include节点引用 -->    <include file="struts-default.xml"></include>           <!-- package提供了将多个Action组织为一个模块的方式,package的名字必须是唯一的,package可以扩展,当一个package扩展自        另一个package时该package会在本身配置的基础上加入扩展的package的配置,父package必须在子package前配置。        name:package名称        extends:继承的父package名称        abstract:设置package的属性为抽象的 抽象的package不能定义action 值true:false        namespace:考虑到同一个Web应用中需要同名的Action,Struts2以命名空间的方式来管理Action,同一个命名空间不能有同名的Action,,定义package命名空间 该命名空间影响到url的地址,例如此命名空间为/test那么访问是的地址为http://localhost:8080/struts2/test/XX.action--><!-- struts2的action必须放在一个指定的包空间下定义 -->    <package name="com.kay.struts2" extends="struts-default" namespace="/test">        <interceptors><!-- 定义拦截器                name:拦截器名称                 class:拦截器类路径                name:拦截器名称                 class:拦截器类路径-->            <interceptor name="timer" class="com.kay.timer"></interceptor>            <interceptor name="logger" class="com.kay.logger"></interceptor>            <!-- 定义拦截器栈 -->            <interceptor-stack name="mystack">                <interceptor-ref name="timer"></interceptor-ref>                <interceptor-ref name="logger"></interceptor-ref>            </interceptor-stack>        </interceptors>        <!--常量属性--><constant name="struts.custom.i18n.resources" value="messages"/>        <!-- 定义默认的拦截器 每个Action都会自动引用,如果Action中引用了其它的拦截器 默认的拦截器将无效 -->        <default-interceptor-ref name="mystack"></default-interceptor-ref>                        <!-- 全局results配置 -->        <global-results>            <result name="input">/error.jsp</result>        </global-results>                <!-- Action配置 一个Action可以被多次映射(只要action配置中的name不同)             name:action名称             class: 对应的类的路径             method: 调用Action中的方法名-->        <action name="hello" class="com.kay.struts2.Action.LoginAction">            <!-- 引用拦截器           name:拦截器名称或拦截器栈名称-->            <interceptor-ref name="timer"></interceptor-ref>            <!-- 节点配置                name : result名称 和Action中返回的值相同                type : result类型 不写则选用superpackage的type struts-default.xml中的默认为dispatcher--><result name="success" type="dispatcher">/talk.jsp</result><!-- 参数设置name:对应Action中的get/set方法-->         <param name="url">http://www.sina.com</param></action>    </package></struts>


每一个Action可以配置多个result,多个ExceptionHandler,多个Intercepter,但是只能有一个name,这个name和package的namespace来唯一区别一个Action。 

每当struts2框架接受到一个请求的时候,他会去掉Host,Application和后缀等信息,得到Action的名字,例如如下的请求将得到Welcome这个Action。 

0 0
原创粉丝点击