Struts2源码分析(一)绘制Tomcat启动时时序图并分析

这里写图片描述

绘制Struts2启动时执行过程的时序图如上所示。现在我们从代码的角度来分析上述的过程。

Struts的核心组建为名叫StrutsPrepareAndExecuteFilter的过滤器。在Tomcat启动的时候会执行过滤器器的init()方法。

1.执行StrutsPrepareAndExecuteFilter的init()方法
public void init(FilterConfig filterConfig) throws ServletException {
        InitOperations init = new InitOperations();
        Dispatcher dispatcher = null;
        try {
            FilterHostConfig config = new FilterHostConfig(filterConfig);
            init.initLogging(config);
            dispatcher = init.initDispatcher(config);
            init.initStaticContentLoader(config, dispatcher);

            prepare = new PrepareOperations(dispatcher);
            execute = new ExecuteOperations(dispatcher);
            this.excludedPatterns = init.buildExcludedPatternsList(dispatcher);

            postInit(dispatcher, filterConfig);
        } finally {
            if (dispatcher != null) {
                dispatcher.cleanUpAfterInit();
            }
            init.cleanup();
        }
2.执行了InitOperations的initDispatcher方法

Dispathcer是Struts中很核心的一个类。它用来初始化配置文件和调用指定的Action的execute()方法。

 dispatcher = init.initDispatcher(config);

初始化该类的具体细节:

   public Dispatcher initDispatcher( HostConfig filterConfig ) {
        Dispatcher dispatcher = createDispatcher(filterConfig);
        dispatcher.init();
        return dispatcher;
    }
3.调用Dispatcher的init方法

我们看init方法内部的细节:

            init_DefaultProperties(); // [1]
            init_TraditionalXmlConfigurations(); // [2]

如上这两个方法分别加载了不同的配置文件。

4. init_DefaultProperties()

根据方法名也不能看出,该方法加载了默认的属性文件。
该方法其实是调用了DefaultPropertiesProvider的register()方法。在register()方法中加载了org/apache/struts2/default

5. init_TraditionalXmlConfigurations();

观察该类源码:

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

该方法加载了如下的配置文件:
struts-default.xml,struts-plugin.xml,struts.xml

如上过程就是Tomcat在启动过程中执行流程,主要是加载了很多配置文件。后面的文章会逐渐分析Struts2框架的其他源码内容。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值