`

ActionMapper---webwork 2.1到2.2 的变化

阅读更多
ActionMapper

ActionMapper用来负责在HTTP请求和action调用请求之间进行一个映射,反之亦然.当提供了一个 HttpServletRequest,如果没有action调用请求映射,ActionMapper可能会返回null,否则会可能返回一个描述了一个action调用的ActionMapping,WebWork会试着去调用.ActionMapper没必要保证返回的ActionMapping是一个真正的action,也就是说保证是一个合法的请求.这意味这大多数的ActionMapper不需要考虑WebWork的配置来确定一个请求是否被映射了.

就像一个请求可以从HTTP映射到一个action调用,相反的映射也是可以的.当然,因为HTTP请求(当在HTTP回应中显示时)必须是字符串的格式,一个字符串被返回,而不是一个实际的请求对象.

DefaultActionMapper

缺省情况下,DefaultActionMapper 会被使用:
缺省的action mapper实现,使用的是标准的 *.[ext] (这里 ext(后缀) 通常是 "action") 模式.这个后缀从WebWork的配置主键webwork.action.extension中获取.

个人认为比较爽的地儿:
--------------------------------------------------------------------
为了帮助处理按钮和其他相关的需求,这个mapper(我们希望,其他ActionMapper也能这样)具有这样的功能:使用一些预定义的前缀命名一个按钮,这些按钮会引发执行行为.这四个前缀是:
Method 前缀- method:default
Action 前缀- action:dashboard
Redirect 前缀- redirect:cancel.jsp
Redirect-action 前缀- redirect-action:cancel

除了这四个前缀,这个mapper也明白 foo!bar的action命名方式,或者扩展方式(例如 foo!bar.action) ,或者前缀方式(例如 action:foo!bar).这个语法告诉mapper映射到名称为foo的action和对应的方法bar.

Method 前缀

使用method前缀,来代替调用baz action的 execute()方法(缺省是这个,如果在xwork.xml里面没有被设置成其他方法的话),baz action的 anotherMethod会被调用.一个非常优雅的方法来确定那个按钮被点击了.作为选择,当点击时,submit按钮可以在action上设置一个特殊的值(one would have submit button set a particular value on the action when clicked),execute()方法依赖那个按钮被点击来决定如何处理设置的值.
<ww:form name="baz">
    <ww:textfield label="Enter your name" name="person.name"/>
    <ww:submit value="Create person"/>
    <ww:submit name="method:anotherMethod" value="Cancel"/>
</ww:form>

Action 前缀

使用action前缀,代替执行baz action的execute()方法(缺省是这个,如果在xwork.xml里面没有被设置成其他方法的话),anotherAction action的execute()方法(再次假定在xwork.xml里面它没有被重置)会被执行.
<ww:form name="baz">
    <ww:textfield label="Enter your name" name="person.name"/>
    <ww:submit value="Create person"/>
    <ww:submit name="action:anotherAction" value="Cancel"/>
</ww:form>

Redirect 前缀

使用redirect前缀,代替执行baz action的execute()方法(缺省是这个,如果在xwork.xml里面没有被设置成其他方法的话),它会进行转向,在这里是 www.google.com. 在内部,它使用ServletRedirectResult 来完成这个任务.
<ww:form name="baz">
    <ww:textfield label="Enter your name" name="person.name"/>
    <ww:submit value="Create person"/>
    <ww:submit name="redirect:www.google.com" value="Cancel"/>
</ww:form>

Redirect-action prefix

使用redirect-action前缀,代替执行baz action的execute()方法(缺省是这个,如果在xwork.xml里面没有被设置成其他方法的话),它会转向,在这里是 'dashboard.action'.在内部,它使用ServletRedirectResult 来执行这个任务,并从webwork.properties里读取后缀.
<ww:form name="baz">
    <ww:textfield label="Enter your name" name="person.name"/>
    <ww:submit value="Create person"/>
    <ww:submit name="redirect-action:dashboard" value="Cancel"/>
</ww:form>
--------------------------------------------------------------------
ActionMapperFactory

你可以定义你自己的ActionMapper来配置ActionMapperFactory:

工厂创建了ActionMapper.这个工厂查找在WebWork的配置文件里*webwork.mapper.class*主键定义的ActionMapper类名.

使用自己的ActionMapper可以定义你自己的清晰的命名空间,例如URL类似 /person/1 ,就类似于使用DefaultActionMapper时对应的请求 /getPerson.action?personID=1 .


referrence
分享到:
评论
1 楼 37du 2013-09-22  
受教了,对于理解运行过程有很好的效果

相关推荐

    MWLL Actionmapper-开源

    MWLL Actionmapper Java前端,用于更改《机甲生存传奇》中的密钥。 从MWLL v0.3开始,最新版本的Actionmaper将包含在该发行版中。

    Struts2_s2-016&017&ognl2.6.11_patch漏洞补丁

    struts.xml文件中新增以下内容: &lt;!-- 为修复struts2 s2-016、s2-017...struts2_s2-016&017_patch.jar拷贝到lib目录下。 ognl-2.6.11.jar直接覆盖掉原有文件。 使用工具进行测试漏洞是否依然存在。 2013年7月25日

    struts2开发文档

    struts2的所有知识点 流程 原理 一个请求在Struts2框架中的处理大概分为以下几个步骤: 1 客户端初始化一个指向Servlet容器(例如Tomcat)的请求; 2 这个请求经过一系列的过滤...在这个过程中需要涉及到ActionMapper

    Struts2的工作原理和流程

    1 客户端初始化一个指向Servlet容器的请求; 2 这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他...在这个过程中需要涉及到ActionMapper

    Struts2 chm文档

    目录 1.Struts 2权威指南——第1章 Struts 2概述.doc 2.truts 2权威指南——第2章 Struts 2下的HelloWorld.doc 3.Struts 2权威指南——第3章 Struts...11.改写Restful2ActionMapper让Struts2支持REST风格的URL映射.doc

    Struts2 2.3.16_doc

    This result uses the ActionMapper provided by the ActionMapperFactory to redirect the browser to a URL that invokes the specified action and (optional) namespace. This is better than the ...

    SSH的jar包.rar

    3、接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请求是否需要调用某个Action FilterDispatcher是控制器的核心,就是mvc中c控制层的核心。下面粗略的分析下FilterDispatcher工作流程和...

    struts2流程与流程图

     FilterDispatcher询问ActionMapper是否需要调用某个Action来处理这个(HttpServlet Request)请求,如果ActionMapper决定需要调用某个Action,FilterDispatcher则把请求的处理交给ActionProxy。  ActionProxy...

    Struts课堂笔记.rar--struts2的struts.properties配置文件详解

    The org.apache.struts2.dispatcher.mapper.ActionMapper implementation class org.apache.struts2.dispatcher.mapper.ActionMapper接口 struts.multipart.maxSize The maximize size of a multipart request ...

    Struts2请求处理流程及源码分析

    a)客户端初始化一个指向Servlet容器...d)请求经过核心过滤器FilterDispatcher,执行doFilter方法,在该方法中,询问ActionMapper来决定这个请求是否需要调用某个Action;e)如果ActionMapper决定需要调用某个Action,则

    struts2urlplugin:Struts2 插件支持 URL 中的模式匹配,用于动作映射器

    Struts 2 的插件,允许开发人员控制 URL 如何映射到他们的操作: 使用正则表达式; 通过路径或命名空间将参数传递给动作; 控制允许的 HTTP 方法; 使用替代动作方法; 定义索引和默认操作; 和 插入自定义模式...

    Java Struts 实现拦截器

    该请求被提交到一系列的标准过滤器(Filter)组建链中(如ActionContextCleanUp:它主要是清理当前线程的ActionContext、Dispatcher,FilterDispatcher主要是通过ActionMapper来决定需要调用那个Action,...

Global site tag (gtag.js) - Google Analytics