Struts2拦截器拦截器是Struts2的核心组成部分.ppt
上传人:天马****23 上传时间:2024-09-11 格式:PPT 页数:16 大小:171KB 金币:10 举报 版权申诉
预览加载中,请您耐心等待几秒...

Struts2拦截器拦截器是Struts2的核心组成部分.ppt

Struts2拦截器拦截器是Struts2的核心组成部分.ppt

预览

免费试读已结束,剩余 6 页请下载文档后查看

10 金币

下载此文档

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

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

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

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

一、拦截器介绍以及实现原理1.拦截器简介那到底什么是拦截器呢?下面通过一个现实生活的例子来说明,假如现在你乘电梯去办公室。在你进入电梯之前,电梯要首先开门你才能进入。同样当你进入电梯后,电梯将自动关门。这时电梯就可以看作是一个拦截器,在你进去之前和之后都进行了操作,其示意图如图所示。拦截器的功能,就是在进行一个操作(调用方法)时,它会在用户执行操作前进行一系列操作,同样在用户操作完成后,进行一系列操作。一、拦截器介绍以及实现原理2.拦截器实现原理这里发现了一个问题,电梯应该是自动开门和自动关门的,也是就拦截器中的方法应该是自动执行的。有读者肯定有疑问,方法可以在不调用的情况下自动执行吗?其实这里所指的自动执行不是说真正的自动,而是指通过代码驱动来由系统自动执行,这时需要用到动态代理方面的知识。其实所谓的拦截其实就是动态的生成一个代理对象,而在这个代理对象中包含了拦截器方法的调用。所以当调用该代理对象的方法时,同时会调用拦截器中的方法,通过这样的方法就实现了动态调用拦截器方法的目的。二、自定义拦截器1.通过Interceptor接口实现拦截器前面介绍了动态代理模式以及拦截器实现原理,现在开始本章的重头戏自定义拦截器。首先来看如何定义自己的拦截器。打开com.opensymphony.xwork2.ActionInvocation包,找到并打开Interceptor.java文件,代码如下所示。publicinterfaceInterceptorextendsSerializable{voiddestroy()//销毁方法voidinit();//初始化方法Stringintercept(ActionInvocationinvocation)throwsException;//拦截方法}二、自定义拦截器2.通过AbstractInterceptor类实现拦截器前面通过实现Interceptor接口实现了自定义拦截器类的,但是我们发现就算我们不需要对拦截器的初始化和销毁进行任何操作,也不得不实现init方法和destroy方法。这时可以使用另外一个类AbstractInterceptor。该类是一个抽象类并实现了Interceptor接口,其代码如下所示。publicabstractclassAbstractInterceptorimplementsInterceptor{publicvoidinit(){//初始化方法}publicvoiddestroy(){//销毁方法}publicabstractStringintercept(ActionInvocationinvocation)throwsException;//拦截方法}二、自定义拦截器3.截器配置拦截器前面介绍了如何定义拦截器类,但是这时拦截器还不能起作用。要拦截器其作用则必须在struts.xml文件中配置该拦截器,下面介绍几种配置拦截器的方法。1.最简单的配置2.配置并传递参数3.配置多个拦截器4.配置拦截器栈5.配置拦截器栈并传递参数6.在拦截器栈中再引入拦截器栈二、自定义拦截器4.使用拦截器前面已经介绍了如何配置拦截器,但是现在拦截器还是不能起作用。因为Action还不知道要使用哪个拦截器,所以还必须在Action元素中通过添加interceptor-ref节点来指定使用哪个拦截器,代码格式如下所示。<actionname="业务控制器名"class="业务控制器实现类"><resultname="success"></result><interceptor-refname="拦截器名"></interceptor-ref></action>interceptor-ref节点中包含一个属性name,该属性用来配置需要使用的拦截器的名称。二、自定义拦截器5.使用默认拦截器Struts2中的类型转换、输入校验、文件上传等操作都是通过调用特别的拦截器来完成的,拦截器是Struts2的核心部分。但是在struts.xml文件中我们并没有使用这些拦截器,这些拦截器是如何起作用呢?这是因为在配置Action时,将该Action放到了struts2包中,而这个包继承了struts-default。重点在于在struts-default中配置了默认的拦截器栈defaultStack,在该拦截器栈中定义了大量的拦截器。struts2这个包继承struts-default,就相当于同样配置了默认的拦截器栈defaultStack,所以可以不用手动配置和使用这些拦截器。只需要在使用myInterceptor拦截器后添加一个inter