`
younglibin
  • 浏览: 1213981 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

struts2中Action的五大元素

阅读更多

在大概了解了Struts2的Action后,我们来重点研究一下在Struts2的Action周围,为Action进行服务的一些重要元素,这些元素将涵盖Action的数据环境,Action的执行环境、Action的调度者、Action的层次结构和Action的执行结果。

ActionContext —— 数据环境

之前我们提到了Struts2的Action并不是一个Servlet,它是脱离了Web容器的。但是对于一个Web框架来说,所有的数据请求(Request)和数据返回(Response)都来源于Web容器,那么Action在执行的时候,如何去获取这些数据呢?

这个问题的答案就在于,我们需要为每个Action准备一个数据环境,这个数据环境被称之为:ActionContext。由于Action是应对于一个又一个的URL请求,所以ActionContext应该具备以下的特性:

1. ActionContext应成为Action与Web容器之间的桥梁

2. ActionContext中应该保存有针对某个请求的详细信息

3. ActionContext应该是一个线程安全的类对象

Interceptor —— 丰富的层次结构

简单回顾一下上面所提到的Action的职责,我们看到,需要在Action这个层面上完成的事情还不少。而完成这些职责,就需要我们对这些职责进行合理的分类和排序,将他们组织成有序的执行队列。在Struts2中,使用了一种类似责任链的设计模式对这些不同的职责进行分类并串联起来,从而使得Action层具备了丰富的层次结构。而在这个执行队列中的每个元素,就被我们称之为Interceptor,也就是拦截器。
拦截器是AOP中的概念,它本身是一段代码,可以通过定义“织入点”,来指定拦截器的代码在“织入点”的前后执行,从而起到拦截的作用。正如上面Struts2的Reference中讲述的,Struts2的Interceptor,其拦截的对象是Action代码,可以定义在Action代码之前或者之后执行拦截器的代码。

如果仔细留意一下Action LifeCycle图中的Interceptor和Action的部分,我们可以看到,Interceptor一层一层的把Action包了起来。这是一个典型的堆栈结构,在代码执行的时候,每个Interceptor不仅需要文成它自身的逻辑,还通过递归调用负责下一个拦截器或Action的调用。
也正如Struts2的Reference所说,Struts2提供的绝大多数的功能支持,都通过Interceptor来实现,这些Interceptor可以随意进行配置,并且能够方便的插入到程序中去运行。

Result —— 执行结果

有执行就必然有执行的结果。在Struts2中,Action的执行结果被抽象成了一个层次。在这个层次中,可以定义任意类型的View层的结构。也就是说,Struts2并不强制View层的表现形式,可以是JSP、Freemarker模板、二进制流输出等等。

Struts2把执行结果抽象成一个层次,使得你可以不再关注许多视图整合上面的细节,只需要考虑视图的类型和数据的准备,这样,你也可以不必在沉浸在杂乱的构造视图的代码中。

ActionProxy —— 执行环境

有了拦截器Interceptor,有了Action本身,也有了Action的执行结果Result,我们就需要一个类似调度器的产品,将这些元素整合起来,进行调度执行。在上面的Action Lifecyle的图中,我们可以看到,Interceptor、Action和Result都处于ActionProxy中,所以ActionProxy就成为了所有这些元素的执行环境。


既然是执行环境,那么ActionProxy就需要提供Action执行的时候一切所需要的配置、参数等等,当然,也要有进行Action调用的入口。prepare和execute方法是用作Action调用的入口函数,其他的接口定义都与Action执行时的运行参数和配置有关。
ActionInvocation —— 调度者

在上面的ActionProxy的接口定义中,我们可以看到有一个比较特殊的变量:ActionInvocation比较吸引我们的眼球。从字面上去理解,ActionInvocation就是Action的调用者。事实上也是如此,ActionInvocation在这个Action的执行过程中,负责Interceptor、Action和Result等一系列元素的调度。

在之后的章节中,这个ActionInvocation类也将成为我们解读Struts2源码的一个重要入手点。这个类将告诉你,Struts2是如何通过ActionInvocation来实现对Interceptor、Action和Result的合理调度的。

0
0
分享到:
评论

相关推荐

    struts2中文教程

    在Struts2中,模型由Action类表示,视图主要由JSP页面和Struts2的标签库构建,控制器由Struts2框架自身提供,通过拦截器链来处理请求并决定如何响应。 五、实战演练 学习Struts2时,建议通过实际项目练习来加深...

    Struts2视频教程

    - **标签库**:Struts2提供了丰富的标签库,可以帮助开发者快速构建表单和页面元素,提高开发效率。 - **拦截器**:拦截器是Struts2的一个重要特性,可以在请求到达Action之前或之后执行特定的操作,如验证用户登录...

    struts2 in action

    - 结果(Result)是Struts2中用于指定动作执行后返回给用户的响应方式,比如可以设置返回一个JSP页面、重定向到另一个URL等。 - 通过配置文件可以灵活地定义各种不同类型的结果处理方式。 #### 五、改善应用程序 ...

    struts2的复习

    8. 结果映射:Struts2支持基于结果名称的映射,通过struts.properties文件或Action注解中的result元素定义,可以灵活地指定结果的URL。 9. 通配符匹配:Struts2允许使用通配符进行Action和结果的匹配,例如,`*.{...

    struts2inaction

    - **拦截器(Interceptors)**:拦截器是Struts 2中的另一个关键组件,它允许开发者对动作执行前后的行为进行定制,例如自动管理事务、验证用户输入等。 - **类型转换(Type Conversion)**:Struts 2提供了自动的...

    struts2-action.pdf

    #### 三、Action的五大核心元素 1. **Action接口**:这是所有Action类都需要实现的接口,它定义了Action的基本行为。 2. **ActionProxy**:它是Action的代理,负责管理Action实例、配置以及执行过程中的状态。 3. *...

    原创struts2讲义2.pdf

    拦截器是Struts2中的一个重要特性,它允许开发者在Action执行前后添加自定义的行为,比如身份验证、数据校验等。通过配置文件可以轻松地控制哪些Action需要经过哪些拦截器。 **1.2.3 FilterDispatcher与Action映射*...

    struts2API文档

    在这个文档中,你可以找到关于Action、Result、Interceptor等核心组件的信息,以及如何配置Struts2的XML文件,如struts.xml。此外,它还可能涵盖了ActionSupport类、ValueStack、OGNL(Object-Graph Navigation ...

    Struts2五种数据封装Demo

    在这个“Struts2五种数据封装Demo”中,我们将深入探讨Struts2的数据封装机制,以及如何通过配置文件来操作Servlet的三大核心对象——Request、Session和Application。同时,我们还将了解如何从表单中获取数据并进行...

    struts2综合复习习题

    - Struts2中的`<s:iterator>`标签用于迭代集合中的元素。在迭代过程中,可以通过`isEven()`方法来判断当前元素是否处于偶数位置。此方法返回`true`表示当前位置是偶数位置,即第一个元素的位置不是偶数位置,第二个...

    struts2配置文件

    在Struts2中,配置文件主要分为两个部分:`struts-default.xml`和用户自定义的配置文件,如`struts.xml`或`struts-config.xml`。这些XML文件定义了Action、结果类型、拦截器和包等元素,从而控制应用程序的行为。 *...

    Struts2拦截器及其用法详细说明

    在Struts2中,这些处理逻辑被封装在独立的类中,当请求到达Action之前,拦截器会按照预定义的顺序执行,执行完后再继续进行Action处理,最后返回结果。拦截器可以用于日志记录、权限验证、性能监控等多种场景。 **...

    struts2 知识点

    - **Action**: Struts2中的控制器组件,负责接收用户请求并处理业务逻辑。 - **Model**: 数据模型,用于存储应用程序的数据和业务逻辑。 - **View**: 展示层,通常由JSP或FreeMarker模板构成,负责展示数据给用户。 ...

    Struts2 标签使用简介

    在Struts2中,标签库是其一大特色,极大地简化了视图层的开发,使得HTML页面与Java代码的交互更加方便。这篇简介将深入探讨Struts2中的标签使用。 一、Struts2标签库概述 Struts2的标签库是由一系列预定义的JSP标签...

    Starting Struts 2

    Struts 2的配置文件通常为struts.xml,它定义了Action、Interceptor、Result等元素的配置,是整个框架的配置中心。此外,Struts 2支持注解配置,使得代码更加简洁。 六、OGNL表达式语言 OGNL(Object-Graph ...

    struts2自学文档

    - **接收请求参数**:Struts2能够自动将请求参数绑定到Action中的属性。 - **自定义类型转换器**:对于特定类型的请求参数,可以通过自定义类型转换器进行转换。 #### 八、其他功能 - **文件上传**:Struts2支持...

    struts2常用标签详解

    首先,我们需要了解Struts2标签库的主要组成部分,它们分为Action、Display、Logic、Field和UI五大类。这些标签提供了丰富的功能,用于处理表单、展示数据、控制流程等。 1. **Action标签**:这类标签主要用于调用...

    Struts2中的参数传递

    在Struts2中,这些参数可以直接通过表单元素的`name`属性与Action类中的属性相匹配,无需额外配置即可实现自动绑定。 例如,下面的HTML代码展示了一个简单的表单,其中包含了一个文本框和一个下拉框,分别用于输入...

Global site tag (gtag.js) - Google Analytics