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. Think in UML笔记第1章--为什么要UML

    1.1 面向过程还是面向对象 面向过程和面向对象都是一种软件技术.例如把面向过程归纳为结构化程序设计.DFD图.ER模型.UC矩阵等,而面向对象则被归纳为继承.封装.多态.复用等具体的技术.事实上,上 ...

  2. java中使用session的一些细节

    获取session的时候会产出一个sessionid并且发给客户端,第二次回发的时候再根据该sessionid获取session.如果cookies被禁用,则需要通过URL传入. asp.net下的s ...

  3. python 批量重命名文件后缀

    # batch_file_rename.py # Created: 6th August 2012 ''' This will batch rename a group of files in a g ...

  4. ruby关于flip-flop理解上一个注意点

    (..).each do |x| puts x ) .. (x == ) end 上面的flip-flop的用法,你可以理解成 将 大于等于5和小于等于10的数字打印出来,也就是理解成  puts x ...

  5. using inno setup uninstall default icon

    If you set SetupIconFile then the Uninstall Exe File (e.g. unins000.exe) will have exactly same icon ...

  6. (medium)LeetCode 207.Course Schedule

    There are a total of n courses you have to take, labeled from 0 to n - 1. Some courses may have prer ...

  7. H264 Profile

    H.264有四种profile,对应四种H264画质级别.每个profile支持一组特定的编码功能,并支持一类特定的应用,分别是BP.EP.MP.HP: 1. BP-Baseline Profile ...

  8. oracle 事务测试

    此文章是根据官方改变 模拟帐户转账流程 1.JOHN帐户扣除-DAVID帐户增加-记录日志-事务提交 三个操作必须全部完成此事务才完成,否则失败 创建帐户余额表自增字段自增序列:    ; 创建支票表 ...

  9. 转载:Windows Phone 8.1 投影我的屏幕使用教程

    原文地址:http://livesino.net/archives/6851.live 更新了软件的下载地址. Windows Phone 8.1 新功能投影我的屏幕(Project My Scree ...

  10. Appium小试

    最近有空玩了一下Appium,记录一下 1.下载Appium for windows,现在是0.12.3版本 https://bitbucket.org/appium/appium.app/downl ...