struts2的工作流程

总结:
   1、在struts2的配置文件中
       两大类型的配置
         一种类型  独立于包外的
          bean
          constant
          include
        一种类型   package  
           action,interceptor,result等都是在package中的,可以利用extend机制继承
   2、在执行过滤器的过程中
       1、创建ActionContext(prepare.createActionContext(request, response))
              1、创建actionContext
              2、创建值栈
              3、把actionContext加入到当前线程中

       2、创建actionProxy(ActionProxy proxy = config.getContainer().getInstance(ActionProxyFactory.class).createActionProxy(
                    namespace, name, method, extraContext, true, false))

              执行DefaultActionInvocation的init方法
                  1、创建action
                  2、把action放入到栈顶
                  3、创建所有的拦截器,并且产生拦截器的迭代器

       3、执行Proxy的execute方法(proxy.execute())
            proxy.execute()---->invocaction.invoke方法
                   1、执行所有的拦截器
                   2、执行当前请求的action
                   3、执行PreResultListener
                   4、执行结果集

       4、清除数据(prepare.cleanupRequest(request))  在finally中,这样即便出错,也能清除

大致流程如下(伪码)









1.当服务器启动的时候,会去执行org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter过滤器里的init方法

<filter>
	<filter-name>struts2</filter-name>
	<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>

<filter-mapping>
	<filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
</filter-mapping>

org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter过滤器的init方法里主要发生两件事:

//把servlet容器与struts2核心过滤器做了一个整合
FilterHostConfig config = new FilterHostConfig(filterConfig);
//初始化所有的资源文件  default.properties,struts-default.xml,struts-plugin.xml,struts.xml
dispatcher = init.initDispatcher(config);




2.当发出请求的时候会进行如下操作:

(一)createActionContext(创建ActionContext)做了如下操作

             (1).创建ActionContext对象

             (2).创建ValueStack

              (3).把整个ActionContext对象放到了ThreadLoacl中


(二)execute.executeAction  做了如下操作:

上图中右下图也是Dispather类中的。

⑴.创建actionProxy
              执行DefaultActionInvocation的init方法
                  1、创建action
                  2、把action放入到栈顶
                  3、创建所有的拦截器,并且产生拦截器的迭代器




⑵执行Proxy的execute方法
            proxy.execute()---->invocaction.invoke方法
                   1、执行所有的拦截器
                   2、执行当前请求的action
                   3、执行PreResultListener,将模型驱动至于栈顶
                   4、执行结果集



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值