zoukankan      html  css  js  c++  java
  • Sturts2【四】 StrutsPrepareAndExecuteFilter源码分析<二>

    本文供个人学习,复习使用,不适合他人阅读

    接上文讲到ActionProxy了,还不知道这个类的作用,名字是action的代理类,实际上作用还得看看。

    ExecuteOperations类

    execute.executeAction调用了调度器处理action请求,看下文具体讲serviceAciton方法

    Dispatcher类

    532-546、都在做一件事,创建出了一个contextmap副本,也就是前文说过的ActionContext中里的数据Map,然后获取/创建ValueStack(老熟人),并存入该map副本

    547-549 看不懂,可能也不是关键

    549-555 关键来了,构造了ActionProxy对象,用了ActionMapping类的信息和刚刚构造的map,用一个工厂产生的,继续进入看看工厂做了什么

    564、proxy.execute()内调用了invocation.invoke()开始执行拦截器链,进入拦截器链我就先不写了。

    DefaultActionProxyFactory类

    56、老熟人ActionInvocation(过滤器传递的对象)持有了这个map副本,然后容器注入了这个类,注入这里不懂没事,继续往下看

    在这里生成了代理类,也注入了这个类,进入70行看代理类调用的prepare方法

    ActionProxy类

    179、config是一个ActionConfig对象,也就是struts.xml里的action配置的对象,里面还包含了拦截器,很关键

    我直接说这里getActionConfig做的事,用namesoace和actionName去匹配struts.xml里的配置(用一下面的集合保存了),如果为空,就抛出异常。

    取得ActionConfig的代码就这三行

     private Map<String, Map<String, ActionConfig>> namespaceActionConfigs;

     Map<String, ActionConfig> actions = namespaceActionConfigs.get(namespace);

    actions.get(actionName);//但其实这里用了占位符应该取不到,要用其他,!访问应该也是取不到,要用更下面的

    188、有了ActionConfig,自然知道你调用的方法了,填充到本类的method变量中

    194、init做了不少事

    Map<String, Object> contextMap = createContextMap();//给ActionInvocation生成ContextMap(又是这个map)

    createAction(contextMap);//生成action对象,就是你访问的action对象,这里我用的spring管理action对象,所以被spring生成了,不用的话好像就是反射生成

    List<InterceptorMapping> interceptorList = new ArrayList<InterceptorMapping>(proxy.getConfig().getInterceptors());
    interceptors = interceptorList.iterator();//获取过滤器链的迭代器

    总结

    本节主要分析了ExecuteOperations调用Dispatcher.serviceAction()处理action中所作的操作,出现了总览图中的ActionProxy 类,对应了下图这一步骤

    关键代码:

    ActionProxy proxy = getContainer().getInstance(ActionProxyFactory.class).createActionProxy(
    namespace, name, method, extraContext, true, false);

    这一个操作生成了ActionProxy 、ActionInvocation

    proxy.prepare()匹配到ActionConfig对象

    invocation.init(proxy)生成了Action对象,并获取了拦截器链

  • 相关阅读:
    AjaxHelper使用范例
    IE浏览器的条件编译指令和微软的ajax实现
    基于AjaxHelper0.41的相册范例程序演示及一个关于博客园的功能建议
    AjaxHelper 0.41
    .Net环境下基于Ajax的MVC方案
    Msys/MinGW与Cygwin/gcc[转]
    常见应用程序的架构
    perl正则表达式[转]
    [CruiseControl] 概念
    MinGW
  • 原文地址:https://www.cnblogs.com/haon/p/10846155.html
Copyright © 2011-2022 走看看