预览加载中,请您耐心等待几秒...
1/8
2/8
3/8
4/8
5/8
6/8
7/8
8/8

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

实现拦截器——编写自己的拦截器(下篇) Struts2提供的拦截器机制大大提高了自身的灵活性,而且Struts2本 身提供的拦截器也为大家省了不少事,了解Struts2本身的拦截器也 是十分重要的一件事情.通过了解Struts2本身的拦截器可以使我们 编写出更强壮的拦截器. 使用预定义拦截器 在Struts2中使用拦截器需要将Action与拦截器(拦截器栈)关联起来,拦截器才可以发 挥神奇的作用.在平时编写基于Struts的程序时我们并不关心拦截器(拦截器栈)的使用,这是 因为Struts2默默的为我们定义了默认拦截器栈defaultStack,defaultStack中包含了经常 使用的拦截器使得Struts2程序变得强大而又神奇.defaultStack中包含了以下拦截器: 拦截器-exception -用于捕获在拦截器和Action执行中的异常信息,并根据异常类型显示不同的页面. -创建ExceptionHolder对象,用来包装异常信息,并置入值栈中,供错误页面显示相关消 息.这里要提到的是Struts2中以错误页面的方式来处理在程序执行过程中产生的异常信息, 那么出现异常怎样指定错误页面呢?别急,接着向下看.在Struts2中要处理异常信息显示错 误页面,我们需要在Struts2的配置文件中添加如下配置信息: <global-results> <resultname="error">页面</result> </global-results> <global-exception-mappings> <exception-mappingexception="异常类型"result="error"> <global-exception-mappings> 这些配置信息的添加是以配置文件中的包(package)为单位的,可以为每个包声明不同 的错误页面. 拦截器-servletConfig -如果Action实现了访问ServletAPI的接口,如ServletContextAware,SessionAware 等,这里就不一一列举了(忘记的话可以看我以前的文章《对话ServletAPI——Struts2访问 ServletAPI》),则提供访问方法. 拦截器-i18n -支持国际化的拦截器. 拦截器-chain -记得两个Action互相传递参数和属性的情况吗?就是这个拦截器发挥的作用.就是让前 一个Action中的参数在可以在下一个Action中可以使用. 拦截器-modelDriven -某个Action实现了ModelDriven接口,通过getModel方法返回了领域模型的对象, 那么modelDriven拦截器就将领域模型的对象压置值栈的栈顶,以方便设置或获得参数. 拦截器-staticParams -将action配置中指定的参数值设置到Action实例中.如: <actionname="index"class="..."> <paramname="param">...</param> <result>/pages/index.jsp</result> </action> 拦截器-params -将请求参数的值设置到值栈中的属性中. 拦截器-conversionError -将类型转化错误(由ActionContext中)加入到Action的Fielderror中(通过 addFieldError方法-接口ValidationAware中定义的方法) 拦截器-validation -执行声明式校验 -如果Action所在的包中存在ActionName-validation.xml校验规则声明文件,则进行 输入校验处理.有校验错误发生时,将错误消息加入Action中. 拦截器-workFlow -执行编程式校验 -如果Action实现了Validateable接口,则执行编程式校验,调用其中的validate方法. 如果有校验错误消息,则终止正常流程,返回input字符串. 其它几个拦截器 在Struts2中我们最常用的就是默认的拦截器,我们在上面列举了默认拦截器栈中部分 拦截器,我认为这些都是我们必须了解的,也是相当重要的,当然其中几个我没有提到,这并不 意味这不重要.除去默认拦截器栈之外Struts2还定义了许多拦截器栈提供给我们使用,大家 可以去Struts2-core包下找到struts-default.xml中查查看.另外还要提到timer和logger 拦截器,也挺有作用的拦截器,自己去试试吧. 注意拦截器的顺序 在使用拦截器的同时也应该关心到配置拦截器时的顺序,要不然挺