这一篇主要从宏观角度讲了Struts2的架构和作用。

Struts2 在典型的三层结构的开发模式中被视作“表示层”的解决方案。因而最为核心的内容就是和Web容器打交道,帮助我们处理Http请求。

Struts2 通过扩展实现Servlet标准来处理 Http请求。

Struts2框架的作用实际上只是处理 Http 请求,并进行内部处理,再进行Http返回,而整个过程的代码级别的实现,无论如何进行封装都离不开对Servlet标准或者JSP标准所指定的底层API调用。

struts2 的核心程序

Struts2 的核心入口程序,从功能上必须能够处理http请求,为了达到这一请求,Struts2毫无例外地遵循了 Servlet 标准,通过实现标准的 Filter 接口来进行 Http 请求处理。

  • 第一条主线—— Struts2的初始化:init 方法驱动执行
  • 第二条主线—— Struts2 处理 Http 请求: doFilter方法驱动执行。

下图是Struts2入口程序执行示意图

入口

Struts2初始化主线

主要做了两大内容:

1.框架元素的初始化工作

对框架内部许多内置对象的创建和缓存。初始化工作仅在Web应用启动时执行一次

2.控制框架运行的必要条件

框架的可扩展性保证了我们可以在应用层面对框架的运行参数和执行模式进行定制化,而框架有必要对这种定制化进行正确性校验。校验失败,则启动失败。

Http请求主线是Struts2的核心主线。这条主线将在任何满足 web.xml 中所指定的 URL Pattern 的Http请求发生时进行响应,由doFilter方法负责驱动执行。

Struts2的请求处理主线

观察上图,可以知道,Struts2的请求处理主线分为两个阶段:

  • 第一阶段——Http请求预处理

在这个阶段中,程序执行的控制权在Struts2手上,这个阶段的主要工作就是针对每一个Http请求进行预处理,为真正的业务逻辑执行做必要的数据环境和运行环境的准备。程序在这个阶段:依赖于容器,时时刻刻与容器打交道

struts2将这一段代码整合到了 struts2-core-2.2.1.jar.

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

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

程序在这个阶段的特点:不依赖于容器,完全由XWork框架驱动整个执行的过程。

struts2将这一段代码整合到了 xwork-core-2.2.1.jar.

从代码的整合上也可以看出Struts2框架的划分。

可以说,严格意义上的Struts2实际上是由2 个不同的框架所组成的。一个是真正意义上的Struts2,另一个是XWork。从职责上说,XWork才是真正实现MVC的XWork框架。