一、**Struts2简介**

1.概念:轻量级的MVC框架,主要解决了请求分发的问题,重心在控制层和表现层。低侵入性,与业务代码的耦合度很低。Struts2实现了MVC,并提供了一系列API,采用模式化方式简化业务开发过程。

2、Strust2 核心功能

(1)允许POJO(Plain Old Java Objects)对象 作为Action

(2)Action的execute 方法不再与Servlet API耦合,更易测试

(3)支持更多视图技术(JSP、FreeMarker、Velocity)

(4)基于Spring AOP思想的拦截器机制,更易扩展

(5)更强大、更易用输入校验功能

3.与Servlet对比

优点:业务代码解耦,提高开发效率

缺点:执行效率偏低,需要使用反射、解析XML等技术手段,结构复杂

4.不同框架实现MVC的方式

Servlet: Spring: Struts2:

Struts2 - 图1Struts2 - 图2Struts2 - 图3

二、Struts2原理图:

Struts2 - 图4Struts2 - 图5

(1) 客户端(Client)向Action发用一个请求(Request)

(2) Container通过web.xml映射请求,并获得控制器(Controller)的名字

(3) 容器(Container)调用控制器(StrutsPrepareAndExecuteFilter或FilterDispatcher)。在Struts2.1以前调用FilterDispatcher,Struts2.1以后调用StrutsPrepareAndExecuteFilter

(4) 控制器(Controller)通过ActionMapper获得Action的信息

(5) 控制器(Controller)调用ActionProxy

(6) ActionProxy读取struts.xml文件获取action和interceptor stack的信息。

(7) ActionProxy把request请求传递给ActionInvocation

(8) ActionInvocation依次调用action和interceptor

(9) 根据action的配置信息,产生result

(10) Result信息返回给ActionInvocation

(11) 产生一个HttpServletResponse响应

(12) 产生的响应行为发送给客服端。

在Struts2.1以前调用FilterDispatcher,Struts2.1以后调StrutsPrepareAndExecuteFilter

三、参数传递

1.Action从页面取值

a)基本属性注入(页面,Action)

Struts2 - 图6

b)域模型注入(页面,Action)

Struts2 - 图7

2.页面从Action取值

a)使用EL表达式

Struts2 - 图8

b)OGNL

四、OGNL

1.概念:Object Graph Navigation Language,是一门功能强大的表达式语言,类似于EL。Strut2默认采用OGNL表达式访问Action的数据,实际上是通过ValueStack对象来访问Action。

2.用法:在Struts2中,OGNL表达式要结合Struts2标签来访问数据

EL:${user.userName} OGNL:
访问基本属性
访问实体对象
访问数组/集合
访问Map
运算
调用方法
创建集合 ArrayList
创建Map LinkedHashMap

五、ValueStack

六、Action基本原理

七、Result原理

八、UI标签

九、拦截器

详细的可以看 https://www.cnblogs.com/konrad/p/6426790.html