Struts2的工作流程
Struts2处理一个客户端请求可以按照以下步骤进行
1.客户端发出请求
用户通过浏览器向Web服务器发出一个请求。
2.过滤器链过滤请求
请求被提交给三层过滤器进行过滤,先是ActionContextCleanup过滤器,接着是其他过滤器。
3.FilterDispatcher过滤器对请求进行分类处理
FilterDispatcher过滤器对请求进行分类处理
FilterDispatcher过滤器在查询ActionMapper时,看该请求是否请求某一个Action,如果是,FilterDispatcher把请求交给ActionProxy;如果用户请求
静态资源,则直接把相关的资源返回。
4.查询配置文件
Configuration Manager查询struts.xml文件,找到要调用的Action类,并取出该Action的属性。
5.创建ActionProxy实例
根据请求的Action类创建ActionProxy实例,然后ActionInvocation会根据配置文件加载与所请求Action相关的Interceptors(拦截器)。
6.ActionInvocation处理请求
所有的Interceptors按照配置时的先后顺序依次对请求进行处理,然后才是Action类的execute()方法处理请求。接着根据struts.xml找到要返回的result。
Interceptors按照逆顺序被调用处理返回结果,最后把处理结果返回到客户端。
拦截器
拦截器的思想
1.AOP的思想
AOP(面向对象编程)是对OOP(面向对象编程)思想的补充。OOP把客观事物的公共行为抽象出来组成一个代表该事物的对象。该对象有子类和
父类,是一种上下继承的关系,但是没有继承关系的对象也有一些共同的行为。AOP就是要把分散类的公共行为提取出来,组成一个功能模块。
当某个类使用到时,将该模块插入,不需要时将其取出。
2.拦截器的原理
使用拦截器
1.使用内建拦截器
Struts2在struts-default.xml文件中定义了很多内建的拦截器、拦截器栈,程序员在配置自己的Action类时可以直接用<Interceptor-ref>标签。
下面是一些内建拦截器栈。
basicStack:基本的拦截器栈
validationWork:Sample validation和workflow拦截器栈。
fileUploadStack:文件上传拦截器栈。
modelDrivenStack:模型驱动拦截器栈。
defaultStack:默认拦截器栈。
其中defaultStack是默认的拦截器栈,几乎任何一个Action类都必须使用它,否则会出问题。
2.使用自定义拦截器
程序员可以编写拦截器去实现某些功能,然后在配置文件中定义、使用这个拦截器。Struts 2框架提供了AbstractInterceptor接口,该接口提供
了一个方法intercept(),程序员在编写自己的拦截器时,只需要实现这个接口并重写intercept()方法即可。
Struts2中使用ONGL
ONGL(Object Navigation Language)中文称为对象导航语言,是一种简单却又强大的表达式语言。它是Struts2框架视图默认的表达式语言,是
Struts2框架的特点之一。通过使用它,Struts2视图可以直接获取模型层的数据。
ONGL使用简单的表达式来访问Java对象中的属性,它主要用来将前台视图元素和后台模型绑定起来。
Struts2中使用ONGL
Struts 2框架主要在视图层使用ONGL获取后台模型层的数据,并将客户端表单和业务逻辑对象的属性绑定在一起。这些业务逻辑对象都保存在
ActionContext中,主要有一下类型。
application对象:用于访问ServletContext的对象。例如可以通过#application.userName或者#application[‘userName’]访问application中的
userName对象。
session对象:用于访问HttpSession对象。
request对象:用于访问HttpServletRequest对象。
Parameters对象:用于获取HTTP请求参数。
attr对象:用于按照page-request-session-application由小到大的顺序访问某一个属性。