1.1.1       serviceAction方法

在上个Filter方法中我们会看到例如以下代码:

this.execute.executeAction(request, response, mapping);

图3.2.1  Filter方法中跳转到action图

而在ExecuteOperations类中(excute是一个实例)有例如以下代码:

public
void
executeAction(HttpServletRequest request, HttpServletResponse response, ActionMapping mapping)throws ServletException {

dispatcher.serviceAction(request, response,servletContext, mapping);

}

图3.2.2  ExecuteOperations中运行action图

通过上面能够看到,最后进入到Dispatcher类中。在源代码中对于给该类的凝视例如以下,笔者略作翻译,有不当之处,敬请吐槽。

真正的dispatcher(暂译为转发器)会托付它大多数任务给这个工具类。基本转发器的每一个实例都包括一个全部请求所共享的这个转发器实例。

ServiceAction方法主要功能就是通过action配置文件里载入对应的action类,而且运行适当的action中方法。或者直接跳转到Result。

在该类中要注意:

Action的运行是通过反射机实现的。有例如以下代码:

UtilTimerStack.push(timerKey);

String namespace = mapping.getNamespace();

String name = mapping.getName();

String method = mapping.getMethod();

Configuration config = configurationManager.getConfiguration();

ActionProxy proxy = config.getContainer().getInstance(ActionProxyFactory.class).createActionProxy(

namespace, name, method, extraContext, true,false);

图3.2.3  Dispatcher中反射运行action图

图3.2.4  dispatcher类中serviceAction方法时序图

1.1.2       载入struts.xml配置文件

在该类中有init()方法,凝视例如以下:

/**

* Loadconfigurations,includingbothXMLandzero-configurationstrategies,andupdateoptionalsettings,includingwhethertoreloadconfigurationsandresourcefiles.

*/

翻译大概意思是;载入配置文件,包含xml文件以及自己主动配置策略,改动可选择设置,包含是否又一次载入配置和资源文件。

init_FileManager();

init_DefaultProperties(); // [1]

init_TraditionalXmlConfigurations(); // [2]

init_LegacyStrutsProperties(); // [3]

init_CustomConfigurationProviders(); // [5]

init_FilterInitParameters() ; // [6]

init_AliasStandardObjects() ; // [7]

Container container = init_PreloadConfiguration();

container.inject(this);

init_CheckWebLogicWorkaround(container);

图3.2.5  dispatcher类中Init方法主要内容

这些方法就是初始化一些參数,通过名称就能够看到,第一是初始化文件管理,第二个是载入默认的default.properties文件等等。init_TraditionalXmlConfigurations就是初始化xml配置文件。

private
void
init_TraditionalXmlConfigurations() {

String configPaths = initParams.get("config");

if (configPaths ==null) {

configPaths = DEFAULT_CONFIGURATION_PATHS;

}

String[] files = configPaths.split("\\s*[,]\\s*");

for (String file : files) {

if (file.endsWith(".xml")) {

if ("xwork.xml".equals(file)) {   configurationManager.addContainerProvider(createXmlConfigurationProvider(file,false));

} else {

configurationManager.addContainerProvider(createStrutsXmlConfigurationProvider(file,false,servletContext));

}

} else {

throw
new
IllegalArgumentException("Invalid configuration file name");

}

}

}

图3.2.6  dispatcher类中init_TraditionalXmlConfigurations方法主要内容

当中

DEFAULT_CONFIGURATION_PATHS = "struts-default.xml,struts-plugin.xml,struts.xml";

深入struts2.0(五)--Dispatcher类的更多相关文章

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

    1.1     ActionProxy接口以及实现 ActionProxy在struts框架中发挥着很关键的数据. 通过webwork和xwork交互关系图能够看出.它是action和xwork中间的 ...

  2. struts2.0简单教程

    Struts2.0简单配置教程: 在Eclipse中配置Struts2 步骤一:首先打开java ee并建立一个动态网站项目,我建立的项目名为TestDemo,如下图: 建立之后可在左侧发现工程,展开 ...

  3. [转]初探Struts2.0

    本文转自:http://blog.csdn.net/kgd1120/article/details/1667301 Struts作为MVC 2的Web框架,自推出以来不断受到开发者的追捧,得到用广泛的 ...

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

    一.配置: 在struts2中配置常量的方式有三种: 在struts.xml文件中配置 在web.xml文件中配置 在sturts.propreties文件中配置 1.之所以使用struts.prop ...

  5. struts2.0 struts.xml配置文件详解

    <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN&quo ...

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

    Struts2.0+Spring3+Hibernate3(SSH~Demo) 前言:整理一些集成框架,发现网上都是一些半成品,都是共享一部分出来(确实让人很纠结),这是整理了一份SSH的测试案例,完全 ...

  7. struts2.0中struts.xml配置文件详解

    先来展示一个配置文件 <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration ...

  8. Struts2.0 xml文件的配置(package,namespace,action)

    struts.xml配置 struts.xml文件是整个Struts2框架的核心. struts.xml文件内定义了Struts2的系列Action,定义Action时,指定该Action的实现类,并 ...

  9. Struts2.0 封装请求数据和拦截器介绍

    1. Struts2 框架中使用 Servlet 的 API 来操作数据 1.1 完全解耦合的方式 Struts2 框架中提供了一个 ActionContext 类,该类中提供了一些方法: stati ...

随机推荐

  1. ASP.NET自定义控件组件开发 第一章 待续

    原文:ASP.NET自定义控件组件开发 第一章 待续 第一章:从一个简单的控件谈起 系列文章链接: ASP.NET自定义控件组件开发 第一章 待续 ASP.NET自定义控件组件开发 第一章 第二篇 接 ...

  2. Java经典23结构模型的设计模式(三)------附加代理模式、适配器型号、Facade模式的差异

    本文介绍了7样的结构模型中的其余2种:轻量级.代理模式. 一.享元模式FlyWeight 享元模式比較简单且重要,在非常多场合都被用到.仅仅只是封装起来了用户看不到.其概念:运用共享内存技术最大限度的 ...

  3. Unit of Work

    ABP使用及框架解析系列 - [Unit of Work part.2-框架实现]   前言 ABP ABP是“ASP.NET Boilerplate Project”的简称. ABP的官方网站:ht ...

  4. 第十六章——处理锁、阻塞和死锁(3)——使用SQLServer Profiler侦测死锁

    原文:第十六章--处理锁.阻塞和死锁(3)--使用SQLServer Profiler侦测死锁 前言: 作为DBA,可能经常会遇到有同事或者客户反映经常发生死锁,影响了系统的使用.此时,你需要尽快侦测 ...

  5. debian软件安装基础(同tomcat案件)

    基本介绍 笔者是一个Linux盲.一旦只在虚拟机上载通过Ubantu-图形版本,我看着接口.打了几场比赛卸载的光盘上. 往下看,在过去的几天.试想想,在Linux关于建设nexus(mavenPW)玩 ...

  6. 依据Uri获得sd卡图片

    <pre name="code" class="java">String mBigImage = URLEncoder.encode(mImageU ...

  7. [HAOI2005]路由问题,第二短路

    [问题描写叙述]     X城有一个含有N个节点的通信网络,在通信中,我们往往关心信息从一个节点I传输到节点J的最短路径.遗憾的是.因为种种原因,线路中总有一些节点会出故障,因此在传输中要避开故障节点 ...

  8. Codeforces 487C. Prefix Product Sequence 逆+结构体

    意甲冠军: 对于数字n, 他询问是否有1~n置换 这种布置能够在产品上模每个前缀n 有可能0~n-1 解析: 通过观察1肯定要在首位,n一定要在最后 除4意外的合数都没有解 其它质数构造 a[i]=i ...

  9. Boost.Asio c++ 网络编程翻译(26)

    Boost.Asio-其他特性 这章我们讲了解一些Boost.Asio不那么为人所知的特性.标准的stream和streambuf对象有时候会更难用一些,但正如你所见.它们也有它们的益处.最后,你会看 ...

  10. Balanced Binary Tree(Java代码没有结束,是什么原因???)

    Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced binary ...