第19章 Struts2核心剖析

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由小到大的顺序访问某一个属性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值