您的位置:首页 > 编程语言 > Java开发

003--struts2原理

2015-07-30 15:19 639 查看

struts2原理

1、struts原理

1.1、整体结构

官方站点提供的Struts 2 整体结构的图



1.2、Struts2框架处理请求的基本步骤

1、客户端提起一个(HttpServletRequest)请求。如在浏览器中输入”http://localhost:8080/TestMvc/add.action”就是提起一个(HttpServletRequest)请求。

2、请求被提交到一系列(主要是三层)的过滤器(Filter)。先ActionContextCleanUp,再其他过滤器(SiteMesh等),最后到FilterDispatcher。

3、FilterDispatcher是控制器的核心,就是mvc中c控制层的核心。FilterDispatcher询问ActionMapper是否需要调用某个Action来处理这个(request)请求(如在struts.properties配置接受何种后缀的url),如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy。

4、ActionProxy通过Configuration Manager(struts.xml)询问框架的配置文件,找到需要调用的Action类。ActionProxy创建一个ActionInvocation的实例。

5、ActionInvocation通过代理模式调用Action。但在调用之前ActionInvocation会根据配置加载Action相关的所有Interceptor。

6、ActionInvocation处理好结果后返回用户。

2、ongl表达式

2.1、简介

OGNL是Object-Graph Navigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的属性或者调用对象的方法,能够遍历整个对象的结构图。

2.2、结构图

stuts2的ongl结构图:



OGNL标准结构有3个重要组成部分,一个OGNL引擎,一个是root对象,另一个是context对象。
注意:访问context区域需要使用"#"前缀。

2.3、操作

a.可以访问对象属性
  基本类型属性:属性名,如:id
  数组类型属性:属性名加下标,如:roles[0]
  List类型属性:属性名加下标,如:organs[0]
  Map类型属性:属性名加key,如:role_modules.key 或者 role_modules['key']
b.可以访问对象的方法
id.toString()
c.可以访问静态常量和方法
  @java.lang.Math@PI
d.可以访问集合中的数据,进行集合过滤等操作
  "persons.{?#this.age>20}" : 返回persons集合中,满足age>20的所有元素.
  ?指的是返回所有满足条件的元素
  ^指的是返回第一满足条件的元素
  $指的是最后一个满足条件的元素
e.支持Java中的运算符和表达式
  \"name\"+name,

   id+10
f.定义一个List和Map类型的常量
  List常量:{1,2,3}
  Map常量:#{'age':20,'name':\"tom\"}

2.4、应用

1)OGNL在xwork中进行了改造
  xwork将OGNL中的root对象进行了改造,将其改造成了一个栈结构,类型是CompountRoot继承自ArrayList.在访问root属性时,从栈顶对象向下依次查找,找到属性值返回.
2)ValueStack结构
  ValueStack是Struts2中非常重要的数据对象,当客户发送一个请求后,控制器会根据当前请求创建一个ValueStack,并将请求处理相关的数据进行填充.
  root栈:存放当前请求对应的Action对象(栈顶)
  context(Map):存放request,session,application,parameters等信息
3)JSP获取业务数据,需要使用Struts标签+OGNL表达式技术组合
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: