Struts2新特性:用来从动作逻辑中分层出横切关注点的拦截器,基于注解的配置器,OGNL,支持可变更和可重用的UI组件,基于微型MVC模式的标签API。
Struts2的MVC模式
MVC模式的三个关注点:模型,视图,控制器。在Struts中通过动作(action),结果(result),过滤分配器(FilterDispatcher)实现。
1.控制器FilterDispatcher
这个控制器的一个servlet的过滤器。它检查每一个传入请求,决定由那个动作处理。可以通过注解方式或xml文件方式来映射请求的url具体到哪一个动作执行。
2.模型---动作
模型是由数据模型和业务逻辑组成的。一个动作就是将业务逻辑封装到一个独立的工作单元中,而且动作也是数据传输的场所。控制器根据映射的url找到动作,然后处理完数据和业务逻辑后,返回结果到视图中。
3.视图----结果
视图是MVC模式的呈现组件。 一般由jsp页面,Velocity模板等等技术呈现的。视图的作用就是把程序的状态转换成用户可以与之交互的可视化表示。
Struts2的工作原理
请求通过了FilterDispatcher后,可能要经过很多个拦截器,然后到动作中,动作处理完返回结果,然后再通过许多拦截器,经过过滤器返回视图。在拦截器和结果中可以通过OGNL访问ActionContext中的ValueStack。
1.拦截器
在动作之前有一组拦截器, 对动作的调用必须经过这些拦截器。返回结果也要经过拦截器。根据具体情况可以让拦截器在什么时候执行。拦截器允许常见的,横切的任务在简介的,可重用的组件中定义,从而与动作代码分离。
例如日志就可以在调用动作之前,使用拦截器记录。
2.valueStack和OGNL
ValueStack是保管和请求处理相关的所有数据的一块存储区域。OGNL是一种访问存储在中央存储库中数据的一种工具。它是一种允许你引用或操作ValueStack中数据的表达式语言。
ValueStack贯穿了Struts2的整个请求过程,因为它存储在一个线程本地对象中,它的名字叫做ActionContext。ActionContext包含了所有的数据,这些数据构成了动作的执行环境。它包含ValueContext,也包含框架使用的内部数据,例如请求对象,会话对象等等。
声明性架构
Struts2允许声明性架构来描述应用组件的架构组件,而将运行时创建这些架构组件的任务交给框架。
1.两种配置
1.1 配置框架
这种接近传统意义上的配置:更接近于管理活动。例如Struts2默认情况是找.action结尾的URL,也可以配置框架为.do结尾,甚至不用扩展名。
1.2 声明应用程序架构
这种配置我们称为声明性架构。很重要。包括定义Struts组件以及将它们连接起来形成需要的工作流路径。就是点击一个url知道选择哪个动作,选择什么结果来处理流程。xml文件和java注解就是声明性架构。
2 声明架构的两种方式
声明应用程序的架构有两种方式:通过基于xml的配置文件以及通过java注解方式。