• 四、Struts2的执行过程和原理


    1. 执行过程和原理(可能面试题)

      学习目标:熟知struts2的执行过程(下图记住)。源码可以不看

      a、过滤器的初始化

      1StrutsPrepareAndExecuteFilter是一个过滤器,过滤器就有初始化方法

      关键代码:57dispatcher = init.initDispatcher(config);//始化请求分发器。

      2InitOperations

      public Dispatcher initDispatcher( HostConfig filterConfig ) {

      Dispatcher dispatcher = createDispatcher(filterConfig);

      dispatcher.init();

      return dispatcher;

      }

       

      init_FileManager();

      init_DefaultProperties(); // [1]

      init_TraditionalXmlConfigurations(); // [2]

      init_LegacyStrutsProperties(); // [3]

      init_CustomConfigurationProviders(); // [5]

      init_FilterInitParameters() ; // [6]

      init_AliasStandardObjects() ; // [7]

       

      Dispatcher:分发器

      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这几个配置文件

       

      struts-default.xml:struts2-core-**.jar包内部(框架内部的配置文件)

      其中定义了一些Bean对象;有一个抽象的package,内部有一些结果类型,一些拦截器的定义,还有拦截器小组的定义。默认的拦截器小组名字是defaultStack

      struts-plugin.xmlstruts2提供的插件中(插件内部提供)

      struts-xml:程序员自己定义的(开发中经常搞)

      b、过滤器的doFilter方法:用户的每次访问

       

    2. ActionMapping mapping = prepare.findActionMapping(request, response, true);根据你的动作请求,从已经初始化好的配置文件中找对应的动作名称。
    3. Dispatcher

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

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

  • 相关阅读:
    MySQL decimal unsigned 更新负数不报错却为0
    centos 安装jdk
    CentOS7安装docker
    Cron 时间元素
    PHPStorm
    日志习惯
    HTTP幂等性
    navicat for mysql 10.1.7注册码
    localStorage、sessionStorages 使用
    FreePascal
  • 原文地址:https://www.cnblogs.com/Prozhu/p/5886344.html
Copyright © 2020-2023  润新知