zoukankan      html  css  js  c++  java
  • 深入struts2.0(五)--Dispatcher类

    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";

  • 相关阅读:
    Sql Server 2016数据库定时备份操作步骤
    .net 生成原图和多张缩略图
    python小知识
    python小知识
    Q pi (lambda)
    GAE&reward shaping
    yield函数
    关于vs code和markdown
    强化学习第七章
    强化学习第六章
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4273247.html
Copyright © 2011-2022 走看看