深入struts2.0(七)--ActionInvocation接口以及3DefaultActionInvocation类

1.1.1       ActionInvocation类

ActionInvocation定义为一个接口,主要作用是表现action的运行状态。它拥有拦截器和action的实例。

通过重复的运行invoke方法。

首先被actionProxy,然后是拦截器。全部拦截器运行完后就是action和result .

图3.3.4 ActionInvocation类的主要方法

1.1.2       DefaultActionInvocation类

DefaultActionInvocation类是ActionInvocation接口的实现类. 一般都用该类实例化ActionInvocation。 基本的方法例如以下:

图3.3.5 DefaultActionInvocation类的主要方法

关键方法:invoke()方法

executed = false; 默觉得false。表示该action还没有运行。 假设运行就会抛出已经运行的异常。

然后推断拦截器是否已经配置,假设配置了拦截器就会从配置信息中获得拦截器配置类InterceptorMapping。此类中仅仅包括两个属性,一个就是name和interceptor实例。

public String invoke()
throws
Exception {

String profileKey = "invoke: ";

try {

UtilTimerStack.push(profileKey);

if (executed) {

throw
new
IllegalStateException("Action has already executed");

}

//递归运行interceptor

if (interceptors.hasNext())

{          //interceptors是InterceptorMapping实际上是像一个像//FilterChain一样的Interceptor链

//通过调用Invocation.invoke()实现递归牡循环

final InterceptorMapping interceptor =
interceptors.next();

String interceptorMsg = "interceptor: " + interceptor.getName();

UtilTimerStack.push(interceptorMsg);

try {

//在每一个Interceptor的方法中都会return invocation.invoke()

resultCode = interceptor.getInterceptor().intercept(DefaultActionInvocation.this);

}

finally {

UtilTimerStack.pop(interceptorMsg);

}

} else {

//当全部interceptor都运行完,最后运行Action,invokeActionOnly会调用//invokeAction()方法

resultCode = invokeActionOnly();

}

// this is needed because the result will be executed, then control will return to the Interceptor, which will

// return above and flow through again

//在Result返回之前调用preResultListeners

//通过executed控制,仅仅运行一次

if (!executed) {

if (preResultListeners !=
null) {

for (Object preResultListener :
preResultListeners) {

PreResultListener listener = (PreResultListener) preResultListener;

String _profileKey = "preResultListener: ";

try {

UtilTimerStack.push(_profileKey);

listener.beforeResult(this,
resultCode);

}

finally {

UtilTimerStack.pop(_profileKey);

}

}

}

// now execute the result, if we‘re supposed to

//运行result。

if (proxy.getExecuteResult()) {

executeResult();

}

executed = true;

}

return
resultCode;

}

finally {

UtilTimerStack.pop(profileKey);

}

}

时间: 2024-10-18 06:07:29

深入struts2.0(七)--ActionInvocation接口以及3DefaultActionInvocation类的相关文章

深入struts2.0(六)--ActionProxy类

1.1     ActionProxy接口以及实现 ActionProxy在struts框架中发挥着非常重要的作用.通过webwork和xwork交互关系图可以看出,它是action和xwork中间的一层. 正因为ActionProxy的存在导致Action调用更加简洁.接下来我们一起研究下这个核心类. 1.1.1       ActionProxy接口方法 图 3.3.1 ActionProxy接口主要方法图 ActionConfig getConfig();该方法主要是获得创建ActionP

struts2.0的总结

概述 struts2.0是MVC思想的一个具体的框架. struts2.0和struts1.0的关系 要想清楚struts1.0和struts2.0之间的关系,首先要知道WebWork,WebWork是MVC思想的又一个新框架,这个被OpenSymphony组织开发的框架,很大程度的得到大家的认可,在WebWork框架出来之前,Apache组织开发出了struts1.0,但是,由于WebWork框架相对于struts1.0来说,有诸多优点,于是,Apache又开发出了struts2.0,stru

(转)struts2.0配置文件、常量配置详解

一.配置: 在struts2中配置常量的方式有三种: 在struts.xml文件中配置 在web.xml文件中配置 在sturts.propreties文件中配置 1.之所以使用struts.propreties文件配置,是因为为了保持与WebWork的向后兼容 2.在实际开发中,在web.xml中配置常量相比其他两种,需要更多的代码量,会降低了web.xml的可读性 3.通常推荐在struts.xml文件中配置struts2的常量,而且便于集中管理 sturt2中搜索加载常量的顺序是: str

通用财经数据传输与监控平台1.0(泛型,接口与基类,Sql,Ibatis,Awt,Swing)

导言 本系统通过访问url接口,实现财经数据的获取以及实时的更新到用户本地数据库的功能,并且配备了实时的数据传输的监控平台.通过本系统,用户可以的得到并保存所需的财经数据(超过200张表),并能实时的查看数据传输是否正常以及传输中的过程. 目录结构 一.相关技术总结 1.通用DAO.Service.Action的设计与实现:(VERY IMPORTMANT) 面向对象设计:接口.基类.继承:泛型 (如通用类BaseObject.接口BaseDao与实现类BaseDaoImp的设计) 2.树Tre

Struts2.0+Spring3+Hibernate3(SSH~Demo)

前言:整理一些集成框架,发现网上都是一些半成品,都是共享一部分出来(确实让人很纠结),这是整理了一份SSH的测试案例,完全可以用! 言归正传,首先强调一点首先,SSH不是一个框架,而是多个框架(struts+spring+hibernate)的集成,是目前较流行的一种Web应用程序开源集成框架,用于构建灵活.易于扩展的多层Web应用程序. 集成SSH框架的系统从职责上分为四层:表示层.业务逻辑层.数据持久层和域模块层,以帮助开发人员在短期内搭建结构清晰.可复用性好.维护方便的Web应用程序.其中

Sprin2.5+Hibernate3.3+Struts2.0.11集成

1.添加jar文件 Hibernate3.3核心安装包下的/-----------------------------------/hibernate3.jarlib\required\*.jarlib\optional\ehcache-1.2.3.jarhibernate注解安装包下的lib\test\slf4j-log4j12.jar/-----------------------------------/Spring安装包下的/-------------------------------

Java基础知识笔记(七:接口、变量作用域和参数传递)

一.接口 Java语言不允许一个子类拥有多个直接父类,即任何子类只能有一个直接父类.但允许一个类实现多个接口,即在定义类的接口名称列表中可以包含1个或多个接口名称,从而实现多重继承的特性.接口的定义格式如下: [接口修饰词列表] interface 接口名 [extends 接口名称列表] { 接口体 } 接口修饰词列表可以包含0个.1个或者多个接口修饰词.如果存在多个接口修饰词,则在相邻两个接口修饰词之间采用空格分隔开.接口修饰词包括:public.abstract和strictfp等.在同一

struts2.0中Action的对象生命周期详解!!(转)

原文出处:http://blog.csdn.net/wxy_g/article/details/2071662 有很多人问Struts2.0中的对象既然都是线程安全的,都不是单例模式,那么它究竟何时创建,何时销毁呢? 这个和struts2.0中的配置有关,我们来看struts.properties ### if specified, the default object factory can be overridden here ### Note: short-hand notation is

Java6.0中Comparable接口与Comparator接口详解

Java6.0中Comparable接口与Comparator接口详解 说到现在,读者应该对Comparable接口有了大概的了解,但是为什么又要有一个Comparator接口呢?难道Java的开发者都吃饱撑着没事做吗? 再谈Comparator接口之前,大家应该先了解一个叫“策略模式”的东东.一下是百度百科对策略模式的描写: 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法独立于使用它的客户而独立变化.(原文:The Strategy Pattern