`

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  
受教了,对于理解运行过程有很好的效果

相关推荐

    Webwork2-Guide.rar_webwork2

    Webwork2是一个基于Java的轻量级Web应用框架,它为开发者提供了构建MVC(Model-View-Controller)架构的应用程序的强大工具。本教程“Webwork2-Guide”旨在指导用户理解和掌握Webwork2框架的核心概念和技术。让我们...

    MWLL Actionmapper-开源

    【MWLL Actionmapper-开源】是一个专为游戏《机甲生存传奇》(MechWarrior: Living Legends,简称MWLL)设计的开源项目。这个Java前端工具允许玩家自定义游戏内的按键映射,以适应个人的操作习惯,提升游戏体验。...

    webwork通解

    本教程仅涵盖了WebWork的部分内容,实际使用中还涉及到更多高级特性和配置,如国际化、异常处理、模板引擎集成等。对于希望深入了解WebWork的开发者,建议继续探索其他章节,如实战G-Roller-WW以及WebWork与其他开源...

    webwork的api

    7. **ActionForm**:虽然在WebWork 2.x版本中,ActionForm的概念已经被弱化,但在早期版本中,ActionForm用于封装表单数据并传递到Action中。现在,可以直接在Action类中使用字段来处理表单数据。 8. **结果类型...

    struts2资料

    Struts2是一个基于MVC(模型-视图-控制器)设计模式的Java Web应用程序框架,由Struts1和WebWork发展而来。它提供了一种结构化的解决方案,使得开发者能够更有效地构建可维护、可扩展的Web应用。MVC模式将应用分为三...

    java程序员面试题

    Struts2 是一个基于 MVC 设计模式的Web应用程序框架,它是Webwork2.2的升级版。其工作流程如下: - 客户端向Servlet容器(如Tomcat)发起请求。 - 请求经过一系列过滤器(Filter),其中ActionContextCleanUp帮助...

    Struts2_Spring mvc执行原理的面试题

    - **原理**:ActionMapper负责解析HTTP请求中的method参数,并将请求映射到对应的Action上。 #### ActionProxy - **功能**:作为Action的代理,负责调用Action。 - **原理**:当请求被路由到ActionProxy时,它会...

    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日

    基于JAVAWEB的高校小吃查询系统的设计与实现毕业论文.docx

    - 请求处理流程:从客户端发起请求开始,经过ActionMapper、FilterDispatcher等组件处理,最终调用相应的Action类执行业务逻辑。 ### 三、系统功能模块 #### 3.1 菜谱展示 - 实现菜谱的分类展示,如按地区、口味...

    Struts2的结构和编写过程笔记

    - 融合了WebWork2框架的一些特性。 - 所有的标签库自带Table功能,使得 `&lt;s:textfield&gt;` 可以像 `&lt;tr&gt;` 和 `&lt;td&gt;` 一样使用。 - 支持POJO(Plain Old Java Object)表单,不再需要ActionForm。 - Struts2.0内置...

    strut2 strut2 登录

    Struts2的核心是Action类,它负责处理HTTP请求,并通过ActionMapper映射到相应的业务逻辑。同时,Struts2还引入了Interceptor(拦截器)机制,增强了对请求处理的灵活性和可扩展性。 ### 2. Struts2登录流程 #### ...

    struts-2.1.0-lib

    - 请求通过FilterDispatcher(或StrutsPrepareAndExecuteFilter)进入Struts 2框架,经过ActionMapper和ActionProxy定位到具体的Action。 - Action执行后,使用Result将控制权转交给视图层,通常为JSP、FreeMarker...

    struts2工作原理及源码分析学习笔记

    例如,自定义ActionMapper可以改变URL到Action的映射规则,而编写自定义Interceptor则可以插入自定义的业务逻辑或处理流程。总之,熟悉Struts2的工作原理和源码分析对于提升开发效率和问题排查能力具有显著价值。

    struts2附快速入门源码

    "webwork"是Struts2的前身,它的数据流图(WebWork的数据流图.JPG)展示了请求从客户端到服务器,再到业务逻辑,最后返回响应的过程。通常,请求首先由Dispatcher接收,然后通过ActionMapper确定Action,接着...

    struts2学习笔记

    - **ActionMapper**: 映射请求到具体的Action处理器。 - **FilterManager**: 管理过滤器,执行前置操作。 - **ActionProxy**: 作为Action的代理,负责调用Action并处理拦截器。 - **Interceptor**: 执行预处理逻辑...

    struts2总结

    - **请求映射**:通过`ActionMapper`将请求映射到对应的Action。 - **拦截器执行**:通过`ActionProxy`调用一系列拦截器。 - **Action执行**:最终执行具体的Action逻辑。 3. **源码解析** - **...

    struts2+hibernate+spring三大框架技术

    - **Struts2**:在Struts1的基础上进行了重构,整合了WebWork框架的一些特性。 - **WebWork**:早期的Web框架之一,以其强大的拦截器机制著称。 **为什么要使用Struts2框架** - **易于开发**:Struts2提供了丰富的...

    Struts2的结构和分析

    1. **ActionMapper**:负责将用户请求映射到相应的Action类。这是Struts2框架处理请求的第一步。 2. **FilterDispatcher**:作为Struts2的核心控制器,负责调度请求,决定调用哪个Action处理用户请求。 3. **...

    Struts2源码

    这些配置信息会由StrutsPrepareAndExecuteFilter解析,然后构建出一个ActionMapper和ActionConfig对象,用于指导请求映射和执行过程。 ValueStack是Struts2中用于传递数据的对象,它是一个栈结构,包含Action实例和...

Global site tag (gtag.js) - Google Analytics