一、**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原理图:
(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)
b)域模型注入(页面,Action)
2.页面从Action取值
a)使用EL表达式
b)OGNL
四、OGNL
1.概念:Object Graph Navigation Language,是一门功能强大的表达式语言,类似于EL。Strut2默认采用OGNL表达式访问Action的数据,实际上是通过ValueStack对象来访问Action。
2.用法:在Struts2中,OGNL表达式要结合Struts2标签来访问数据
EL:${user.userName} | OGNL: |
---|---|
访问基本属性 | |
访问实体对象 | |
访问数组/集合 | |
访问Map | |
运算 | |
调用方法 | |
创建集合 | |
创建Map |