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. Java:过去、未来的互联网编程之王

    Java对你而言是什么?一门你大学里学过的语言?一个IT行业的通用语言?你相信Java已经为下一次互联网爆炸做好了准备么?Java 一方面为嵌入式计算做了增强,而另一方面为实时应用做了精简,本文将介绍 ...

  2. eclipse快捷键使用

    Eclipse的编辑功能非常强大,掌握了Eclipse快捷键功能,能够大大提高开发效率.Eclipse中有如下一些和编辑相关的快捷键.1. [ALT+/]此快捷键为用户编辑的好帮手,能为用户提供内容的 ...

  3. 最最基层的ajax交互代码jquery+java之间的json跨域传递以及java的json代码返回

    首先导入jar包 上面的jar包主要是用来将map或list数据转换成json字符串,传递到前台使用. 静态页面的代码:2.html <!DOCTYPE html> <html> ...

  4. wince6.0应用程序自启动

    主要思想:将应用程序添加到image里,然后用应用程序代替桌面应用程序,从而使应用程序自启动. 主要步骤:                 1.将应用程序MyApp.exe拷贝到wince600\OS ...

  5. windows查看端口占用

    查看占用端口的进程ID netstat -aon | findstr "9000" 再用进程ID查看进程 tasklist | findstr "6048"

  6. CodeForces 604C 【思维水题】`

    题意: 给你01字符串的长度再给你一个串. 然后你可以在这个串中选择一个起点和一个终点使得这个连续区间内所有的位取反. 求: 经过处理后最多会得到多少次01变换. 例如:0101是4次,0001是2次 ...

  7. 20. Valid Parentheses(stack)

    Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the inpu ...

  8. Html5——WEB(客户端)数据存储

    在客户端存储数据 HTML5 提供了两种在客户端存储数据的新方法: localStorage - 没有时间限制的数据存储 sessionStorage - 针对一个 session 的数据存储 之前, ...

  9. HDU1272

    http://acm.split.hdu.edu.cn/showproblem.php?pid=1272 对于这道题,只要找出形成的图是不是连通无环的图即可.即是判断输入的两个点是否来自同一个父亲结点 ...

  10. android 解决ScrollView嵌套ListView的问题,不能全屏,全屏不能显示下面控件

    在开发中遇到ScrollView嵌套ListView的问题,最开始发出不能全屏,效果是这样的: 但我想要的效果是这样的: 下面看一下布局文件: <?xml version="1.0&q ...