Java学习之Struts 2.x
与传统的Struts1.x相比,Struts2.x允许使用更普通的、传统的Java对象作为Action;Action的execute方法不再与Servlet API耦合,因而更易测试;支持更多的视图技术;基于AOP思想的拦截器机制,提供了极好的可扩展性,整合Ajax支持等。
1、Struts2的MVC架构
控制器:FilterDispatcher,它检查每一个输入请求,决定哪个Struts2动作处理这个请求。
模型:应用程序的内部状态,这个状态由数据模型和业务逻辑共同组成。
Action工作原理
ONGL是一个用来引用、操作ValueStack中数据的强大的表达式语言。
ActionContext包含所有数据,Struts2将所有相关数据集中保存在ValueStack。
2、声明应用程序的架构有两种不同的方式:XML或Java注解。
3、Struts2动作的3个作用:动作封装工作单元、动作为转移数据提供场所、动作为结果路由选择返回控制字符串。Struts2动作不必实现Action接口,任何对象都可以通过实现一个返回控制字符串的execute方法来非正式地实现动作与框架之间的契约。不过大部分的动作会实现com.opensymphony.xwork2.Action接口。ActionSupport类。
4、拦截器完成的任务:横切、预处理和后加工。动作的调用必须首先通过与之关联的拦截器栈。虽然拦截器很重要,但是开发人员不会去编写很多拦截器,Web应用程序的大部分的常见任务已经编写和捆绑进了struts-default包。总指挥是ActionInvocation,拦截器的触发顺序按照配置文件中声明的顺序触发,拦截器的intercept方法会依次调用ActionInvocation的invoke方法来调用下一个拦截器,拦截器有一个3阶段的、有条件的执行周期:做一些预处理、通过调用Invoke将控制转移到后续的拦截器、做一些后加工。
工具拦截器、数据转移拦截器、工作流拦截器
5、声明拦截器和拦截器栈,拦截器映射到工作组件。
6、Web开发的常见任务:数据转移和类型转换,发生在两端。
OGNL(Object Graph Navigation Language),对象图导航语言,用来帮助实现数据转移和类型转换。
7、Struts2与Struts1完全不同,它的核心功能都是使用拦截实现“值栈”的概念,OGNL表达式和Struts2标签来解决应用程序数据,很多注解和约定,使这个框架更加易于使用。
从高层次来看,Struts2是一个上拉MVC(MVC2)框架。在Struts2的Model-View-Controller模式实现以下五个核心组件:
Actions
Interceptors
Value Stack / OGNL
Results / Result types
View technologies