Struts2(配置说起II)

struts.xml文件:
   strust.xml的根元素为:<struts></struts>,在它内部有些子元素,分析一下:

1.package元素:
    struts在设计时已经考虑到了模块化的问题,所以把一些action进行了组织分类,可以放到不同的package中,所以一个struts.xml文件中可以有一个或多个package:
    <struts>
          <package name="" namespace="" extends="struts-default">
               <action name="">
               <action name="">
           </package>

          <package name="" namespace="" extends="struts-default">
               <action name="">
               <action name="">
           </package>
            ....
    </struts>

   每个package都必须要有一个name属性,namespace是可选的,默认是"/",如果非默认,要想调用这个包里的动作,就必须把这个属性所定义的命名空间添加到有关的URI字符串中,如
   /context/angus.action
有了命名空间,访问就得是/context/ namespace/angus.action
   package元素通常要对在struts-default.xml文件里定义的struts-default包进行扩展,如果package扩展了,那struts-default.xml文件里注册的结果类型与拦截器就可以使用了.
扩展的拦截器,以后再说(....)

2.include 元素
   为了方便团队开发,且利于管理大型应用程序的struts.xml,可以把几个模块或者几个功能块的小的类struts.xml配置文件集合到一个文件里.我们可以用include引入进来.
   ...
  <struts>
      <include file="file1.xml">
      <include file="file2.xml">
       ...
      <include file="filen.xml">
  </struts>

   这里的类file1.xml,file2.xml,...filen.xml,结构应该相似,有相同的DOCTYPE各struts根元素

3.constant 元素
     ...
  <struts>
      <constant name="struts.devMode" value="true">
      <constant name="..." value="...">
  </struts>
  
   这个元素的作用是利用这里的配置来覆盖default.properties中的设置值(Struts2配置说起I内有详解)

4.action元素
     action 顾名思义这表示一个动作,一个动作应该有一个action,你可以为它取个名字,
action可以很简单如<action name="testAction"/>,它没有指定处理这个动作的类,而struts2中,默认的动作处理类为ActionSupport类.
     如果不是默认的处理类,就必须设置class属性,此外还有它的动作方法
   <action name="testAction" class="com.angus.TestAction" method="add">
如果没有method,那么动作方法就会被 默认为execute方法.

5 result元素
   <result>是action的子元素,在struts处理完后,控制把控制权转交到哪,如果处理action处理类完成后,可能会有不同返回值,所以可用 会有多个result元素.
   <action name="testAction" class="com.angus.TestAction" method="add">
         <result type="dispatcher" name="success">/test/addSuccess.jsp</result>
         <result type="dispatcher" name="error">/test/addError.jsp</result> 
   </action>
   处理类默认返回的是"success",所有默认的result内的属性可以不写.
   这里的type有很多种:(见result结果类型)

6.grobal-results元素
   一个package可以有一个grobal-results元素,其中 包含的结果是一些通用 的结果,如果一个动作完成后在对应的action中找不相应的result,它将会搜索grobal-results元素.
如:
   <grobal-results>
         <result type="dispatcher" name="success">/test/addSuccess.jsp</result>
         <result type="dispatcher" name="error">/test/addError.jsp</result> 
   </grobal-results>

7.拦截器有关
   有5个与拦截器相关的元素可能会出现在struts.xml文件里:interceptors,interceptor,interceptor-ref.interceptor-stack,
default-interceptor-ref 
    对动作处理的拦截器,如果要使用,必须在<interceptor>内注册,
如:     <package name="all" extends="struts-default">
            <interceptors>
                <interceptor name="validate" class="">
                <interceptor name="logger" class="">
            </interceptors>
        </package>
  如果一个action处理前要经过一系列相同的拦截器进行处理 ,那么可以将这相同的一系列拦截器定义成一个   interceptor-stack;

    <interceptors>
                <interceptor name="validate" class="">
                <interceptor name="logger" class="">
                <interceptor name="exception" class="">
                <interceptor name="servlet-config" class="">
                <interceptor name="i18n" class="">
   </interceptors>

    <interceptor-stack  name="baseStack">
          <interceptor-ref name="exception">
          <interceptor-ref name="servlet-config">         
          <interceptor-ref name="logger">
          <interceptor-ref name="i18n">
    </interceptor-statck>
       
   所以使用的时候,只要写这个stack的名字就行了
    <action name="" class="">
         <interceptor-stack name="baseStack">
           <result >/test/addSuccessjsp</result>
   </action> 

    当然在struts-deault包已经定义好了几个拦截器stack,而且还有定义了一个default-interceptor-ref,如果一个动作没有定义任何拦截器,就将使用这个元素定义的默认拦截器或拦截器栈.
    <default-interceptor-ref name="defaultStack"/>
   如果action元素中有interceptor元素,那么default-interceptor-ref元素将被忽略.

8.param元素
    <param>它可以嵌套在另一个元素中如:action,result-type,interceptor里,它的作用就是传值.
    <param name="key">value</param>




   
   

你可能感兴趣的:(xml,jsp,struts,配置管理)