您现在的位置是: 首页 >  个人博客日记 >  Struts2工作原理剖析(Struts2核心) 博客详情

Struts2工作原理剖析(Struts2核心)

请叫我菜鸟 2019-07-11 23:28 【Struts2框架】 145次预览

简介笔者作为一个从事JavaWeb相关工作的程序员,工作之余还是喜欢研究代码,尤其是框架的一些底层。在本篇文章开始之前,我一直思考如何才能更好的写好本篇文章,也就是说如何让更多的读者能够简单、深入的学习Struts2框架的工作原理。(笔者给读者一个建议,...

笔者作为一个从事JavaWeb相关工作的程序员,工作之余还是喜欢研究代码,尤其是框架的一些底层。在本篇文章开始之前,我一直思考如何才能更好的写好本篇文章,也就是说如何让更多的读者能够简单、深入的学习Struts2框架的工作原理。(笔者给读者一个建议,不管学习那个框架,我们都应该重点要把握好其工作原理,然后在学习的过程中再进一步深入去学习)。

1、我们给出Struts2官网给出的工作原理图:

s1.png

2、Struts2运行流程分析:

(1)请求首先到达StrutsPrepareAndExecuteFilter.doFilter(),StrutsPrepareAndExecuteFilter作为整个框架的核心部分(读者可理解为总指挥)。

(2)在doFilter方法中,先获取ActionMapping。

判断:如果ActionMapping为null,不是Struts请求,直接放行;如果ActionMapping不为null,是Struts请求,继续处理。

(3)通过configurationManager加载Struts的配置信息(即struts.xml),找到请求对应的Action对象,

根据配置信息创建ActionProxy代理类。 [这一步也会把Action对象放入在值栈的对象栈顶]

(4)在StrutsActionProxy.execute()方法中调用DefaultActionInvocation.invoke()方法。

(5)对所有的拦截器进行迭代在去分别调用拦截器intercept方法,进行拦截请求处理。

(6)intercept方法对我们的请求进行一些处理,处理完毕以后继续DefaultActionInvocation.invoke()方法。

(7)如此反复直到所有的拦截器都被调用。

(8)最后才去执行Action类中对应的方法。

(9)Action 执行完毕,ActionInvocation 负责根据 struts.xml 中的配置找到对应的返回结果。调用结果的 execute 方法,渲染结果。在渲染的过程中可以使用Struts2 框架中的标签。

(10)执行各个拦截器 invocation.invoke() 之后的代码。

(11)把结果发送到客户端。

加入我们

  • Java学习资源网官方群1

    群号:280998807(已满)

  • Java学习资源网官方群2

    群号:291195645

  • Java学习资源网官方群3

    群号:691628026

打赏本站

  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!
  • 微信扫码:你说多少就多少~
  • 支付宝扫码:你说多少就多少~