`
chineseoa
  • 浏览: 102933 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

《WebWork in action》第三章

阅读更多
第三章: 配置WebWork

一. 配置Action

    1. 基本配置

       . action名
       . action类
       . result类型

   

    <xwork>
        <include file="webwork-default.xml">
        <package extends="webwork-default" name="default">
        <default-action-ref name="home">

        <action>
                       
                        name="helloWorld"
                       
                        class="ch2.example1.HelloWorld">
                   
            <result name="input">login.jsp</result>
            <result type="redirect" name="success">/index.jsp</result>
        </action>
        </default-action-ref>
    </package>       

        以上例子中,如果helloWorld action返回的result code是SUCCESS,那么用户将会重定向到/index.jsp。如果返回的
        result code是INPUT,将会显示login.jsp页面。

    2.  配置别名重用action

        将多个名字映射到相同的action类;这个名字称为别名。这时多个请求访问相同的execute()方法;

        在别名基础上,可增加一个可选的method属性,指定webwork该调用哪个方法。所指定的方法格式与execute()方法一样。
        这时多个请求访问不同的方法;

        <action class="ch2.example1.Cal" name="add">
            <result name="success">cal.jsp</result>          
        </action>
       
        <action method="minus" class="ch2.example1.Cal" name="minus">
            <result name="success">cal.jsp</result>          
        </action>        

        注:WebWork通过xwork.xml映射至方法有两种途径:
            . 通过查找与method属性的值一致的方法;
            . 通过查找doMethod()形式的方法;

            WebWork先找method属性一致方法,如找不到,再找doMethod()形式方法;

    3.  不配置别名重用action

        通过name!method.action形式请求访问action,其中name为action的映射名字。这时不需额外配置。

        注:优先推荐,但要预防不怀好意的用户通过该途径使用你不想让用户调用的方法;

    4.  通过参数自定义action

        可通过在配置文件中设置参数传递给action. 从而达到非常灵活设置的目的。

        a. 在xwork.xml文件的action配置位置处配置以下信息(配置参数名称为url):

           <action class="ch2.example1.ParamTest" name="paramTest">
              <result name="success">paramTest.jsp</result>
              http://www.javaw.cn         
           </action> 

        b. action

           在action中定义与参数名同名的属性以及对应的setter/getter方法,webwork在action执行时会自动调用
           setter方法为属性赋在xwork.xml文件中所配置的参数值;

        c. jsp

           通过标记: <ww:property value="属性名">  获取参数值;

二. 配置Result

    1.  基本配置:

        <result type="redirect" name="success">paramTest.jsp</result>

        result由两个部分组成:
        . result映射: 通过name属性指定result的逻辑名,name的属性值与action中execute()方法中的返回值相同;
                       result标记本体内容指定跳转的路径,既可以为绝对路径(/代表包含namespace内容在内的web应用根路径),
                       也可以为相对路径;
        . result类型: 通过type属性指定,默认值为dispatcher,可以指定为redirect。如指定为redirect,则产生
                       一个新的请求跳转至目的地址;

    2.  使用全局result映射减少重复配置

        设定全局result,服务于多个action配置,减少重复配置;

        <global-results>
            <result type="redirect" name="success">paramTest.jsp</result>
    </global-results>
        <action class="ch2.example1.ParamTest" name="paramTest">

三. 配置interceptor

    interceptor(拦截器)是一种很特殊的对象,它围绕着action及result的执行过程。它可以在action之前或之后及result
    之后工作,实现了某些逻辑的松耦合,譬如安全、日志和校验。

    1.  定义interceptor

        . 定义

          <package name="webwork-default">
               <interceptors>
                    <interceptor class="com.opensymphony.xwork.interceptor.LoggingInterceptor" name="logger">
                    <interceptor class="com.opensymphony.xwork.interceptor.TimerInterceptor" name="timer">
               </interceptor>
          </interceptor>

          注:一般不需自行定义,在webwork-default.xml文件中已定义了很多interceptor。webwork-default.xml位于
              webwork-2.2.4.jar文件根目录中;

        . 使用

          <package name="webwork-default">
               <interceptors>
                    <interceptor class="com.opensymphony.xwork.interceptor.LoggingInterceptor" name="logger">
                    <interceptor class="com.opensymphony.xwork.interceptor.TimerInterceptor" name="timer">
               </interceptor>
               <action class="ch2.example1.ParamTest" name="paramTest">
                    <interceptor-ref name="timer">
                    <interceptor-ref name="logger">
               </interceptor-ref> 
          </interceptor-ref>
       
        这样设置后,当paramTest.action被调用的时侯,timer和logger两个interceptor也会相应地被调用。

    2.  将多个interceptor组合为栈

        将多个interceptor组合到一起,而不需要为每一个action声明数量众多的<interceptor-ref>。一个interceptor栈包含
        一组interceptor,并且按照它们本身在栈中定义的顺序来执行。

        . 定义

          <package name="webwork-default">
               <interceptors>
                    <interceptor class="com.opensymphony.xwork.interceptor.LoggingInterceptor" name="logger">
                    <interceptor class="com.opensymphony.xwork.interceptor.TimerInterceptor" name="timer">
               </interceptor>
           
               <interceptor-stack name="myStack">
                    <interceptor-ref name="logger">
                    <interceptor-ref name="timer">
               </interceptor-ref>
          </interceptor-ref>         

        . 使用       

          <package name="webwork-default">
               <interceptors>
                    <interceptor class="com.opensymphony.xwork.interceptor.LoggingInterceptor" name="logger">
                    <interceptor class="com.opensymphony.xwork.interceptor.TimerInterceptor" name="timer">
               </interceptor>
           
               <interceptor-stack name="myStack">
                    <interceptor-ref name="logger">
                    <interceptor-ref name="timer">
               </interceptor-ref>

               <action class="ch2.example1.ParamTest" name="paramTest">
                    <interceptor-ref name="myStack">
               </interceptor-ref>
          </action>         

    3.  使用默认interceptor-ref减少重复配置

        通过使用default-interceptor-ref元素,package中每一个action都不再需要定义任何interceptor。

           <package name="webwork-default">
               <interceptors>
                    <interceptor class="com.opensymphony.xwork.interceptor.LoggingInterceptor" name="logger">
                    <interceptor class="com.opensymphony.xwork.interceptor.TimerInterceptor" name="timer">
               </interceptor>
           
               <interceptor-stack name="myStack">
                    <interceptor-ref name="logger">
                    <interceptor-ref name="timer">
               </interceptor-ref>

               <default-interceptor-ref name="myStack">

               <action class="ch2.example1.ParamTest" name="paramTest">
          </action>      

        注:如为一个action定义了interceptor,那么这个action将不再使用默认的interceptor。

四. 高级配置

    1.  package

        WebWork中的package和Java中的package在很多方面非常相似,它将多个action组织成一个模块。简化维护工作,提高
        重用性。一个package中包含了所有将用到的action, result, interceptor的定义。

    2.  扩展package

        WebWork中的package可以扩展另外的package:为其extends属性指定一个用逗号分隔的package列表,从而扩展该列表的
        package。当一个WebWork package扩展另外一个package时,将会从被包含的package中复制所有的定义,并在自己本身
        已有的定义基础上增加这些配置。这让你可以将配置的公共部分集中起来,减少package中重复定义的内容。

        <package extends="webwork-default" name="default">
        ...
        </package>

    3.  映射namespace

        WebWork通过action名字和所属的namespace标识action。如果package没定义namespace属性,将使用默认的namespace: "/"。
        当WebWork接收到一个请求的时侯,WebWork会将请求的URL分为namespace和action名字两个部分,然后从xwork.xml中查找
        namespace/action内容,如果没有找到,则从默认的namespace中查找action。

        <package namespace="/enterinfo" extends="webwork-default" name="default">
            <action class="ch2.example1.ParamTest" name="paramTest">
                    http://www.javaw.cn
                <result type="redirect" name="success">paramTest.jsp</result>
                </action>
        </package>

        以上访问paramTest,通过URL: http://localhost:8080/enterinfo/paramTest.action,其中:
        . /enterinfo为namespace的名字;
        . paramTest为action的名字;

        多个package可以使用相同的namespace。

    4.  使用include标签实现组件化

        为了支持将应用程序划分为更容易管理的模块,WebWork提供了一种包含机制,可以将xwork.xml划分为多个文件,而每一个
        子文件又是与一个模块相联系的。可以通过使用<include>标签指定文件名的方法将子文件包含到xwork.xml中,而WebWork
        就会在应用程序的classpath中查找指定的子文件。

       
        <xwork>
             <include file="webwork-default.xml">            
             <package namespace="/enterinfo" extends="webwork-default" name="default">
             ...
             </package>
        </include>
 
五. 其它配置

    1. web.xml

   
    <web-app xmlns="http://java.sun.com/xml/ns/j2ee" version="2.4">
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
        http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
        <servlet>
            <servlet-name>webwork</servlet-name>
            <servlet-class>
                com.opensymphony.webwork.dispatcher.ServletDispatcher
            </servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>webwork</servlet-name>
            <url-pattern>*.action</url-pattern>
        </servlet-mapping>
        <welcome-file-list>
            <welcome-file>index.jsp</welcome-file>
        </welcome-file-list>
        <jsp-config>
            <taglib>
                <taglib-uri>webwork</taglib-uri>
                <taglib-location>
                    /WEB-INF/lib/webwork-2.2.4.jar
                </taglib-location>
            </taglib>
        </jsp-config>
    </web-app>      

    2. webwork.properties

       xwork.xml定义了action映射,并且将interceptor和result应用到这些action上。而webwork.properties用来定义
       application范围的设置,以及能够改变框架功能的配置参数。

       WebWork首先会装载位于WebWork JAR文件中的default.properties,然后再装载webwork.properties,并且根据
       webwork.properties内容改写之前装载的配置设定。</xwork></include></default-interceptor-ref></interceptor-ref></interceptor-stack></interceptor></interceptors></package> </interceptor-ref></interceptor-stack></interceptor></interceptors></package> </interceptor-stack></interceptor></interceptors></package> </interceptor-ref></action></interceptor></interceptors></package> </interceptors></package> </action></ww:property></include></xwork>
分享到:
评论

相关推荐

    webwork in action 04

    webwork in action 第一部分:概貌 第二部分:核心内容 第三部分:内容的显示 第四部分:高级话题

    webwork in action

    - **环境搭建**:本书第三章详细介绍了如何设置WebWork开发环境,包括服务器配置、框架安装等步骤。 - **第一个WebWork应用**:通过一个简单的“Hello World”示例,读者可以快速上手WebWork框架的基本用法,了解其...

    webwork in action 中文版(第二部分,共三部分)

    in action系列想必同行人士都是知道的,相当的好,请大家下载来看,可以说得上是webwork的权威了

    webwork in action 03

    webwork in action 第一部分:概貌 第二部分:核心内容 第三部分:内容的显示 第四部分:高级话题

    webWork in Action 中文版 第三分卷(共7分卷)

    WebWork in Action(WebWork 在行动)中文版 很值得下载。 清晰版有点大,共7个部分,此为第三分卷,收点象征分 1分吧。找得挺费劲的。

    webwork in action 第三卷(高清中文版3/3)

    资源简介高清中文版共分3卷 这是学习struts2最后的一笔书 这是我读过的讲解框架最好的一本书。  学习任何东西,需要知其所以然,把握其核心思想、理念和方法论,才能做到融会贯通。尤其对于一个框架来说,它的...

    webwork in action 第一卷(高清中文版1/3)

    资源简介高清中文版共分3卷 这是学习struts2最后的一笔书 这是我读过的讲解框架最好的一本书。  学习任何东西,需要知其所以然,把握其核心思想、理念和方法论,才能做到融会贯通。尤其对于一个框架来说,...

    WebWork In Action

    ### 第三部分:内容展示 #### 7. 结果配置与使用 - **结果类型**:介绍各种结果类型(如dispatcher、redirect、chain等),并说明它们的作用场景。 - **结果配置**:演示如何在配置文件中定义不同的结果。 #### 8....

    webWork in Action 中文版 第七分卷(共7分卷)

    WebWork in Action(WebWork 在行动)中文版 很值得下载。 清晰版有点大,共7个部分,此为第一分卷,收点象征分 1分吧。找得挺费劲的。

    webWork in Action 中文版 第一分卷(共7分卷)

    WebWork in Action(WebWork 在行动)中文版 很值得下载。 清晰版有点大,共7个部分,此为第一分卷,收点象征分 1分吧。找得挺费劲的。

    webWork in Action 中文版 第五分卷(共7分卷)

    WebWork in Action(WebWork 在行动)中文版 很值得下载。 清晰版有点大,共7个部分,此为第五分卷,收点象征分 1分吧。找得挺费劲的。

    webWork in Action 中文版 第六分卷(共7分卷)

    WebWork in Action(WebWork 在行动)中文版 很值得下载。 清晰版有点大,共7个部分,此为第六分卷,收点象征分 1分吧。找得挺费劲的。

    webWork in Action 中文版 第四分卷(共7分卷)

    WebWork in Action(WebWork 在行动)中文版 很值得下载。 清晰版有点大,共7个部分,此为第四分卷,收点象征分 1分吧。找得挺费劲的。

    webWork in Action 中文版 第二分卷(共7分卷)

    WebWork in Action(WebWork 在行动)中文版 很值得下载。 清晰版有点大,共7个部分,此为第二分卷,收点象征分 1分吧。找得挺费劲的。

Global site tag (gtag.js) - Google Analytics