一,设计模式MVC的三个关注点所对应的struts2:
模型------动作(action) 试图------结果(result) 控制器---过滤分配器
- 控制器----FilterDispatcher:
检查用户的传入请求,决定哪个struts2动作处理这个请求,然后将用户的请求映射到动作。框架通过这个类的对象完成控制器的任务,我们只需要告诉框架哪个请求url需要映射到哪个动作即可。可以通过基于xml的配置文件,或者java注解来完成请求到动作的映射
2,动作action
作用1:一个动作将业务逻辑调用封装到一个单独的工作单元。作用2:动作是一个数据传输的场所。
控制器根据配置文件或者java注视找到合适的动作,控制器然后会调用这个动作并将请求处理的控制权转交给它,由框架负责管理的调用过程既准备必要的数据又执行动作的业务逻辑,动作完成它的工作后,就去返回用户需要的试图。
3,试图result
二,struts2的工作原理
,请求处理的工作流。
1,struts2框架遵循MVC模式,框架不仅包含MVC组件,还有一些辅助组件参与其中。
2,核心组件--拦截器(后续章节会有详细的讲解,现在只是大致了解)
每一个动作都有一组拦截器与之关联,拦截器在动作被执行之前之后都被调用。并且他们是在结果执行完毕后才被触发。拦截器没有必要再两次触发时都做工作,但是有机会工作。
拦截器,可以再请求处理之前或者处理之后执行,定义了不同的工作流和横切任务,并且能够与其他架构关注点分离。
拦截器,一般处理数据验证,类型转换以及文件上传等等这些鱼请求的动作逻辑没有什么特别关系的需求。
3,ValueStack
ValueStack,存储区域,保管和请求处理相关的所有数据。框架会在这里工作,框架将所有的数据集中保存在ValueStack中。其中的数据跟着处理请求经过所有阶段,贯穿框架整个过程。能做到这点,是因为ValueStack存储在一个线程本地对象ActionContext中。ActionContext时ValueStack的ThreadLocal存储场所,使用ThreadLocal可以在相同的线程执行中的任何地方访问ACtionContext和ValueStack。
4,OGNL
引用和操作ValueStack中数据的表达式语言。拦截器和结果都可以使用OGNL语言来指定指向ValueStack中的值
5,ActionContext包含框架所有数据,这些数据构成了动作执行的环境。其中数据有ValueStack,也包含框架会使用的内部数据,例如请求对象,会话对象以及从servlet api得来的应用程序的映射。
5,struts2的每一个请求的处理,都发生在一个单独的线程中。
6,通常直接获得actionContext和ValueStack总数据时不好的方式,我们主要经常通过使用OGNL来引用和操作ValueStack(存储我正在使用的数据)中的数据。