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. 【Android】android图片轮播

    第一步,先写一个布局文件 <com.main.util.SlideShowView android:id="@+id/slideshowView" android:layou ...

  2. C日常语言实践中小(四)——勇者斗恶龙

    勇者斗恶龙 愿你的国有n龙的头,你想聘请骑士杀死它(全部的头). 村里有m个骑士能够雇佣,一个能力值为x的骑士能够砍掉恶龙一个致敬不超过x的头,且须要支付x个金币. 怎样雇佣骑士才干砍掉恶龙的全部头, ...

  3. Android Studio 1.0 (稳定版) 完全攻略

    这篇博文中主要从以下几点进行叙述: 1.Android Studio安装与使用 2.Android Studio特性 3.Android Studio优点 Android Studio 安装与使用 A ...

  4. 2014年10本月微软MVP应用程序启动!

     2014年10本月微软MVP启动应用程序!    CSDN与微软合作,长期为用户提供申请"微软最有价值专家"的平台,希望有兴趣.资历的朋友以及正在朝这个方向努力的朋友可以积极參与 ...

  5. Cocos2d-Java安装和配置跨平台游戏引擎以及相关的开发工具

    假设认为博文图片不清晰.能够Ctrl+鼠标滚动缩放网页比例 Cocos2d-Java是什么? http://blog.csdn.net/touchsnow/article/details/387047 ...

  6. 移动端 touchmove高频事件与requestAnimationFrame的结合优化

    移动端最高频耗内存的的操作  莫属 touchmove 与scroll事件  两者需要 微观的 优化,使用 requestAnimationFrame性能优化 H5性能优化requestAnimati ...

  7. js 执行一个字符串类型的函数

    两种方法,一种是加括号一种是加叹号,new Function()的方法没有成功. var a = "function(args){console.log(args)}" undef ...

  8. 思考的工作方式——计划经济or市场经济

    背景:单位成立了技术领先的基础部门.专注于产品规划的技术解决方案部门.产品的发展规划方向.批准的项目和各部门的其他工作方案.工作内容是在这一领域没有问题.毕竟,从过去企业发展的一个部门模型现在是一个功 ...

  9. Scala 专题指南

    Scala 专题教程-Case Class和模式匹配 Scala 专题教程-Case Class和模式匹配(1):简单的演示样例 Scala 专题教程-Case Class和模式匹配(2): 模式的种 ...

  10. 用Ghostscript API将PDF格式转换为图像格式(C#)

    原文:用Ghostscript API将PDF格式转换为图像格式(C#) 由于项目需要在.net下将pdf转换为普通图像格式,在网上搜了好久终于找到一个解决方案,于是采用拿来主义直接用.来源见代码中注 ...