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

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

    a、过滤器的初始化

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

    :dispatcher = init.initDispatcher(config);//初始化请求分发器。

    、InitOperations:

    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.xml:struts2提供的插件中(插件内部提供)

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

四、Struts2的执行过程和原理的更多相关文章

  1. C C++ Java C# JS编译、执行过程的原理入门分析

    C.C++是典型的编译型编程语言,编译链接后,点击则可执行. JS,解释型脚本语言,则不需要进行编译,直接解释执行. Java和C#则是所谓的高级语言,编译执行的方式做了很多处理, 尤其是C#,VS编 ...

  2. Struts2内部执行过程

    首先是Struts2的流程图. 一.当有一个请求的时候.执行以下流程. 1 客户端初始化一个指向Servlet容器的请求: 2 这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做Act ...

  3. 动图+源码,演示Java中常用数据结构执行过程及原理

    最近在整理数据结构方面的知识, 系统化看了下Java中常用数据结构, 突发奇想用动画来绘制数据流转过程. 主要基于jdk8, 可能会有些特性与jdk7之前不相同, 例如LinkedList Linke ...

  4. 动图+源码,演示 Java 中常用数据结构执行过程及原理

    ​阅读本文大概需要 3.7 分钟. 作者:大道方圆 cnblogs.com/xdecode/p/9321848.html 最近在整理数据结构方面的知识, 系统化看了下Java中常用数据结构, 突发奇想 ...

  5. struts2笔记---struts2的执行过程

    1.服务器启动: 加载项目web.xml 创建struts核心过滤器对象,执行filter-->init() struts-default.xml     核心功能的初始化 struts-plu ...

  6. Synchronize执行过程

    Synchronize执行过程及原理 在windows原生应用程序开发中,经常伴随多线程的使用,多线程开发很简单,难点就是在于线程的同步,在Delphi中提供了VC中不具备的一个过程Synchroni ...

  7. Bigbluebutton服务执行过程及相关配置文件

    BigBlueButton服务列表 BigBlueButton由许多开源的服务组成,看似很麻烦,实际上拆分开每一个服务就很简单了,组件化平台化.究竟BBB都用到了哪些开源服务?我们来列举一下,名称均带 ...

  8. Struts2拦截器的执行过程浅析

    在学习Struts2的过程中对拦截器和动作类的执行过程一度陷入误区,特别读了一下Struts2的源码,将自己的收获分享给正在困惑的童鞋... 开始先上图: 从Struts2的图可以看出当浏览器发出请求 ...

  9. Web APi之过滤器执行过程原理解析【二】(十一)

    前言 上一节我们详细讲解了过滤器的创建过程以及粗略的介绍了五种过滤器,用此五种过滤器对实现对执行Action方法各个时期的拦截非常重要.这一节我们简单将讲述在Action方法上.控制器上.全局上以及授 ...

随机推荐

  1. 值不能为 null 或为空。参数名: linkText

    “/”应用程序中的服务器错误. 值不能为 null 或为空.参数名: linkText 说明: 执行当前 Web 请求期间,出现未经处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的 ...

  2. 内联函数inline

    1:使用inline函数的时候,必须使函数体和inline说明结合一起,否则编译器将视他为普通函数处理: false: inline void Coord::setcoord(int a,int b) ...

  3. mac打开.caj格式文件

    以为用mac后使用会变得更方便些,写毕设时终于派上用场,可惜啊,mac竟然打不开.caj文件,这意味着什么?相信所有在做毕设的小伙伴们都能懂其中的凄凉.特别是硕士或博士的论文,你得从知网上下上百篇的文 ...

  4. Intellisense for Xrm.Page in CRM 2011

    Intellisense for Xrm.Page in CRM 2011 In CRM 2011 javascripts for crm forms can be stored externally ...

  5. PetaPoco修改

    else if (type == typeof(decimal)) return (decimal)pk == default(decimal); public override void PreEx ...

  6. php dirname(__FILE__) 获取当前文件的绝对路径

    dirname(__FILE__) 取到的是当前文件的绝对路径,也就是说,比起相对路径,查找速度是最快的. 比如当前文件是放在(d:\www\)下,文件名是test.php.  测试的代码如下: &l ...

  7. MSDN(电驴)

    主站: http://msdn.itellyou.cn/ 辅站: http://msdn.ez58.net/

  8. adb 命令模拟按键事件 模拟 点击 事件

    有时我们需要程序模拟按钮或点击,而手机本身又没有,哪么可以采取adb 模拟实现,最后再去实际设备去测试(前期一般都拿不到设备): 如模拟上一首,下一首,暂停等,手机上是没有的,但有些设备上是有的: / ...

  9. Laxcus大数据管理系统2.0(11)- 第九章 容错

    第九章 容错 在当前,由于集群庞大的组织体系和复杂性,以及用户普遍要求低成本硬件,使得集群在运行过程中发生的错误概率,远远高于单一且性能稳定的小型机服务器,并且集群在运行过程中几乎是不允许停止的,这就 ...

  10. 一张图看Google MVP设计架构

    这段时间看了一下Google官方推出的MVP架构案例,决定把对MVP的理解用类图的形式表述一下.MVP架构的设计思想确实非常值得学习,大家如果还不是很了解MVP,建议抽时间去研究研究,相信对大家的架构 ...