struts2的两条主线

struts2的初始化主线

struts2的初始化主线发生在web应用程序启动之初,由入口程序的init方法驱动执行完成:

  • 仅在web应用启动时执行一次——这条主线由Filter中的init方法驱动执行,执行完毕后,该主线结束

  • init方法的执行失败将导致整个web应用启动失败——如果在init方法执行的过程中发生异常,整个web应用将无法启动。

struts2的http请求处理主线

struts2的http请求处理主线是struts2的核心主线,包含了struts2处理http请求、进行必要的数据处理和处理数据返回的全部过程。这条主线将在任何满足web.xml中所指定的URL Pattern的http请求发生时进行响应,由doFilter方法负责驱动执行。该主线又可以划分成两个不同的执行阶段:

第一阶段——http请求预处理

在这个阶段中,程序执行的控制权在struts2手上。这个阶段的主要工作是针对每个http请求进行预处理,为真正的业务逻辑执行做必要的数据环境和运行环境的准备。

http请求预处理

程序代码在这个阶段有一个非常显著的特点:依赖于web容器,并时时刻刻将与web容器打交道作为主要工作。

第二阶段——XWork执行业务逻辑

在这个阶段,程序执行的控制权被移交给了XWork。struts2在完成http请求的预处理后,将http请求中的数据封装成普通的java对象,并由XWork负责执行具体的业务逻辑。

XWork执行业务逻辑

程序代码在这个阶段的特点和第一阶段完全相反:不依赖于web容器,完全由XWork框架驱动整个执行的过程。

XWork元素调用关系

从struts2对于http请求的处理过程中,我们可以看出struts2的核心设计理念在于解耦。所谓解耦,实际上是尽可能地消除核心程序对外部运行环境的依赖,从而保证核心程序能够更加专注于应用程序的逻辑本身。在struts2中,我们所说的外部运行环境就是web容器。

在解耦方面,struts2也确实做到了2个不同的层面,从而使整个设计更加凸显出其优秀之处 :

  • 从代码上进行物理解耦——struts2将第一阶段的代码整合到struts2-core.jar,而将第二阶段中的代码整合到xwork-core.jar

  • 将逻辑分配到不同的执行阶段——struts2将处理数据的逻辑和处理业务的逻辑分配到2个不同的执行阶段,使得我们对于代码逻辑的关注点更为清晰

总结

因此,严格意义上的struts2,实际上由2个不同的框架所组成。一个是真正意义上的struts2,另外一个是XWork。从职务上来说,XWork才是真正实现MVC的框架,struts2的工作是在对http请求进行一定处理后,委托XWork完成真正的逻辑处理。将web容器和MVC实现分离,是struts2区别去其他web框架的最重要的特性,也是最值得我们品味的一个宏观设计思路。


参考:整理归纳自《struts2技术内幕——深入解析struts2架构设计与实现原理》

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值