深入struts2.0(五)--Dispatcher类

时间:2022-09-20 08:09:08

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图

深入struts2.0(五)--Dispatcher类

图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&period;0&plus;Spring3&plus;Hibernate3&lpar;SSH~Demo&rpar;

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

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

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

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

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

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

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

随机推荐

  1. 编译时:virtual memory exhausted&colon; Cannot allocate memory

    一.问题 当安装虚拟机时系统时没有设置swap大小或设置内存太小,编译程序会出现virtual memory exhausted: Cannot allocate memory的问题,可以用swap扩 ...

  2. replace 替换全部的正确姿势

    本文同步自我的个人博客:http://www.52cik.com/2015/11/06/replace-all.html 关于字符串替换问题,其实是个很简单的问题,但却也不那么简单,至少对于很多新手而 ...

  3. 使用SQL Server存储ASP&period;NET Session变量

    创建和配置ASP.NET Session状态数据库 在基于NLB(网络负载平衡)环境下的ASP.NET Web应用程序开发,我们需要将Session存储在数据库*多个Web应用程序调用,以下为配置方 ...

  4. nova分析(9)—— nova-novncproxy

    nova提供了novncproxy代理支持用户通过vnc来访问虚拟机,用户可以通过websocket.java客户端或者spicehtml5来访问.通过websket访问虚拟机的功能已经集成到hori ...

  5. android 开发进阶 自定义控件-仿ios自动清除控件

    先上图: 开发中经常需要自定义view控件或者组合控件,某些控件可能需要一些额外的配置.比如自定义一个标题栏,你可能需要根据不同尺寸的手机定制不同长度的标题栏,或者更常见的你需要配置标题栏的背景,这时 ...

  6. Codeforces Round &num;333 DIV2

    D: B. Lipshitz Sequence time limit per test 1 second memory limit per test 256 megabytes input stand ...

  7. ie调试器

    最大化影响调试的,点右上角的固定按妞

  8. MD5加密函数

    CREATE OR REPLACE FUNCTION MD5( passwd IN VARCHAR2) RETURN VARCHAR2 IS retval ); BEGIN retval := utl ...

  9. CocoaPods 更新慢&amp&semi;swift版本适配

    一.更新慢的问题 使用CocoaPods来添加第三方类库,无论是执行pod install还是pod update都卡在了Analyzing dependencies不动 原因在于当执行以上两个命令的 ...

  10. linux内核中宏likely和unlikely到底做了些什么?

    1. 先看看它们长啥样吧!(它们有两种定义,第一种是使能了程序trace功能的宏定义,第二种是普通的宏定义,咱们分析普通宏定义吧) # define likely(x) __builtin_expec ...