第三章Struts2的拦截器PPT课件

上传人:公**** 文档编号:590445266 上传时间:2024-09-14 格式:PPT 页数:26 大小:1.22MB
返回 下载 相关 举报
第三章Struts2的拦截器PPT课件_第1页
第1页 / 共26页
第三章Struts2的拦截器PPT课件_第2页
第2页 / 共26页
第三章Struts2的拦截器PPT课件_第3页
第3页 / 共26页
第三章Struts2的拦截器PPT课件_第4页
第4页 / 共26页
第三章Struts2的拦截器PPT课件_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《第三章Struts2的拦截器PPT课件》由会员分享,可在线阅读,更多相关《第三章Struts2的拦截器PPT课件(26页珍藏版)》请在金锄头文库上搜索。

1、让IT教学更简单,让IT学习更有效第三章Struts2的拦截器Struts2的内建拦截器实现自定义拦截器应用案例使用拦截器实现权限控制让IT教学更简单,让IT学习更有效学习目标掌握拦截器的配置和使用1 13 3了解拦截器的工作原理2 2熟悉使用自定义拦截器的方法掌握了解熟悉让IT教学更简单,让IT学习更有效目录拦截器简介3.13.1点击查看本小节知识架构Struts2的内建拦截器3.23.2点击查看本小节知识架构自定义拦截器3.33.3点击查看本小节知识架构让IT教学更简单,让IT学习更有效让IT教学更简单,让IT学习更有效为什么使用拦截器? 拦截器是Struts2框架的重要组成部分,Stru

2、ts2的很多功能都是构建在拦截器之上的,如数据校验、转换器、国际化等。 Struts2利用其内建的拦截器可以完成大部分的操作,当内置拦截器不能满足时,开发者也可以自己扩展。可以说,Struts2框架之所以简单易用,与拦截器的作用是分不开的。3.1拦截器简介让IT教学更简单,让IT学习更有效让IT教学更简单,让IT学习更有效拦截器概述拦截器概述拦截器(Interceptor)是Struts2的核心组成部分,它可以动态拦截Action调用的对象,类似于Servlet中的过滤器。Struts2的拦截器是AOP(Aspect-Object-Programming,面向切面编程)的一种实现策略,是可插拔

3、的,需要某一个功能时就“插入”这个功能的拦截器,不需要这个功能时就“拔出”这一拦截器。它可以任意地组合Action提供的附加功能,而不需要修改Action的代码,开发者只需要提供拦截器的实现类,并将其配置在struts.xml中即可。3.1拦截器简介让IT教学更简单,让IT学习更有效让IT教学更简单,让IT学习更有效拦截器工作原理通常情况下,拦截器都是以代理方式调用的,它在一个Action执行前后进行拦截,围绕着Action和Result的执行而执行,其工作方式如下图所示。3.1拦截器简介让IT教学更简单,让IT学习更有效让IT教学更简单,让IT学习更有效从上图可以看出,Struts2拦截器的

4、实现原理与Servlet过滤器的实现原理类似,它以链式执行,对真正要执行的方法(execute())进行拦截。首先执行Action配置的拦截器,在Action和Result执行之后,拦截器会再次执行(与先前调用顺序相反),在此链式执行的过程中,每一个拦截器都可以直接返回,从而终止余下的拦截器、Action及Result的执行。3.1拦截器简介让IT教学更简单,让IT学习更有效让IT教学更简单,让IT学习更有效拦截器的配置拦截器的配置了解了拦截器的工作原理后,本小节将介绍如何配置并使用拦截器。要想让拦截器起作用,首先要对它进行配置。拦截器的配置是在struts.xml文件中完成的,它通常以标签开

5、头,以标签结束定义拦截器的语法格式如下:1、拦截器 paramValue上述语法格式中,name属性用来指定拦截器的名称,class属性用于指定拦截器的实现类。有时,在定义拦截器时需要传入参数,这时需要使用标签,其中name属性用来指定参数的名称,paramValue表示参数的值。3.1拦截器简介让IT教学更简单,让IT学习更有效让IT教学更简单,让IT学习更有效3.1拦截器简介在实际开发中,经常需要在Action执行前同时执行多个拦截动作,如:用户登录检查、登录日志记录以及权限检查等,这时,可以把多个拦截器组成一个拦截器栈。在使用时,可以将栈内的多个拦截器当成一个整体来引用。当拦截器栈被附加

6、到一个Action上时,在执行Action之前必须先执行拦截器栈中的每一个拦截器。 定义拦截器栈使用元素和子元素,当配置多个拦截器时,需要使用元素来指定多个拦截器,配置语法如下:2、拦截器栈 . 这段代码中, interceptorStackName值表示配置的拦截器栈的名称;interceptorName值表示拦截器的名称。让IT教学更简单,让IT学习更有效让IT教学更简单,让IT学习更有效除此之外,在一个拦截器栈中还可以包含另一个拦截器栈,示例代码如下:package name=default namespace=/ extends=struts-default 在上述代码中,定义的拦截器

7、栈是myStack,在myStack栈中,除了引用了两个自定义的拦截器interceptor1和interceptor2外,还引用了一个内置拦截器栈defaultStack,这个拦截器是必须要引入的。3.1拦截器简介让IT教学更简单,让IT学习更有效让IT教学更简单,让IT学习更有效在实际开发中,经常需要在Act如果想对一个包下的Action使用相同的拦截器,则需要为该包中的每个Action都重复指定同一个拦截器,这样写显然过于繁琐。这时,可以使用默认拦截器,默认拦截器可以对其指定的包中,所有的Action都能起到拦截的作用。一旦为某一个包指定了默认拦截器,并且该包中的Action未显示的指定

8、拦截器,则会使用默认拦截器。反之,若此包中的Action显示的指定了某个拦截器,则该默认拦截器将会被屏蔽。此时,如果还想使用默认拦截器,则需要用户手动配置该默认拦截器的引用。配置默认拦截器需要使用元素,此元素为元素的子元素。其语法格式如下:3、默认拦截器上述语法格式中,name属性的值必须是已存在的拦截器或拦截器栈的名称。下面用该语法格式配置一个默认拦截器,示例代码如下:3.1拦截器简介让IT教学更简单,让IT学习更有效让IT教学更简单,让IT学习更有效在上面代码中,指定了包下面的默认拦截器为一个拦截器栈,该拦截器栈将会作用于包下所有的Action。 /login.jsp 注意:注意: 每一个

9、包下只能定义一个默认拦截器,如果需要多个拦截器作为默认拦截器,则可以将这些拦截器定义为一个拦截器栈,再将这个拦截器栈作为默认拦截器即可。3.1拦截器简介让IT教学更简单,让IT学习更有效让IT教学更简单,让IT学习更有效 Struts2中内置了许多拦截器,这些拦截器以name-class 对的形式配置在struts-default.xml文件中,name是拦截器的名称,也就是引用的名字;class指定了该拦截器所对应的实现,只要自定义的包继承了Struts2的struts-default包,就可以使用默认包中定义的内建拦截器,否则需要自己定义拦截器。3.2Struts2的内建拦截器概述让IT教

10、学更简单,让IT学习更有效让IT教学更简单,让IT学习更有效内建拦截器的内建拦截器的介绍介绍在struts-default.xml中,每一个拦截器都具有不同的意义,具体内容如下表。3.2Struts2的内建拦截器让IT教学更简单,让IT学习更有效让IT教学更简单,让IT学习更有效3.2Struts2的内建拦截器让IT教学更简单,让IT学习更有效让IT教学更简单,让IT学习更有效Struts2框架除了提供这些有用的拦截器外,还定义了一些拦截器栈,在开发Web应用的时候,可以直接引用这些拦截器栈,而无需自定义拦截器。 注意:注意: 随着Struts2 版本的发展,内建拦截器的数量也在相应的增多,不

11、同版本的Struts2拦截器的数量有一些差异,此版本的Struts2内置拦截器共有35个。3.2Struts2的内建拦截器让IT教学更简单,让IT学习更有效让IT教学更简单,让IT学习更有效内建拦截器的内建拦截器的配置配置上一小节中,已经了解了一些Struts2的内置拦截器以及他们的意义,下面看一下在struts-default.xml中定义的拦截器的部分配置。在struts-core-2.3.24.jar包中的根目录下找到struts-default.xml文件,打开后找到元素下的内建拦截器和拦截器栈,具体代码请查看教材3.2.2小节。在内建拦截器的配置代码中,defaultStack拦截器

12、组合了多个拦截器,这些拦截器的顺序经过精心的设计可以满足大部分Web应用程序的需求,只要定义包的过程中继承struts-default包,那么defaultStack拦截器栈就是默认拦截器的引用。因篇幅有限,这里没有列出所有的内建拦截器和拦截器栈,读者需要时,可以自行查阅struts-default.xml文件。3.2Struts2的内建拦截器让IT教学更简单,让IT学习更有效让IT教学更简单,让IT学习更有效 在实际的项目开发中,Struts2的内置拦截器可以完成大部分的拦截任务,但是,一些与系统逻辑相关的通用功能(如权限的控制、用户登录控制等),则需要通过自定义拦截器来实现。本节将详细讲解

13、如何自定义拦截器。3.3自定义拦截器概述让IT教学更简单,让IT学习更有效让IT教学更简单,让IT学习更有效实现自定义拦截器实现自定义拦截器在程序开发过程中,如果需要开发自己的拦截器类,就需要直接或间接的实现com.opensymphony.xwork2.interceptor.Interceptor接口。其定义的代码如下:3.3自定义拦截器public interface Interceptor extends Serializable void init();void destroy(); String intercept(ActionInvocation invocation) thro

14、ws Exception;该接口提供了三个方法,其具体介绍如下。void init():该方法在拦截器被创建后会立即被调用, 它在拦截器的生命周期内只被调用一次. 可以在该方法中对相关资源进行必要的初始化。让IT教学更简单,让IT学习更有效让IT教学更简单,让IT学习更有效void destroy():该方法与init方法相对应,在拦截器实例被销毁之前,将调用该方法来释放和拦截器相关的资源。它在拦截器的生命周期内,也只被调用一次。String intercept(ActionInvocation invocation) throws Exception:该方法是拦截器的核心方法,用来添加真正执

15、行拦截工作的代码,实现具体的拦截操作。它返回一个字符串作为逻辑视图,系统根据返回的字符串跳转到对应的视图资源。每拦截一个动作请求, 该方法就会被调用一次。该方法的ActionInvocation参数包含了被拦截的Action的引用,可以通过该参数的invoke()方法,将控制权转给下一个拦截器或者转给Action的execute()方法。如果需要自定义拦截器,只需要实现Interceptor接口的三个方法即可。然而在实际开发过程中,除了实现Interceptor接口可以自定义拦截器外,更常用的一种方式是继承抽象拦截器类AbstractIntercepter。该类实现了Interceptor接口

16、,并且提供了init()方法和destroy()方法的空实现。使用时,可以直接继承该抽象类,而不用实现那些不必要的方法。3.3自定义拦截器让IT教学更简单,让IT学习更有效让IT教学更简单,让IT学习更有效拦截器类AbstractInterceptor中定义的方法如下所示:3.3自定义拦截器public abstract class AbstractInterceptor implements Interceptor public void init() public void destroy() public abstract String intercept(ActionInvocatio

17、n invocation) throws Exception;从上述代码中可以看出,AbstractInterceptor类已经实现了Interceptor接口的所有方法,一般情况下,只需继承AbstractInterceptor类,实现interceptor()方法就可以创建自定义拦截器。只有当自定义的拦截器需要打开系统资源时,才需要覆盖AbstractInterceptor类的init()方法和destroy()方法。与实现Interceptor接口相比,继承AbstractInterceptor类的方法更为简单。让IT教学更简单,让IT学习更有效让IT教学更简单,让IT学习更有效拦截器类

18、AbstractInterceptor中定义的方法如下所示:通过之前对拦截器的学习,可将自定义拦截器的使用过程分为3步,具体如下:用户自定义的拦截器类,必须实现Interceptor接口或继承AbstractInterceptor类;需要在Struts.xml中定义自定义的拦截器;在Struts.xml中的Action中使用拦截器。3.3自定义拦截器案例代码接下来,通过一个具体案例来演示自定义拦截器的实现过程,请查看教材文件3-13-9。让IT教学更简单,让IT学习更有效3.4本章小结 本章首先介绍了拦截器的基础知识,讲解了拦截器的配置和使用方法,然后介绍了Struts2的内置拦截器,最后介绍了自定义拦截器的实现方式,并使用自定义拦截器,对用户登录进行权限控制。 通过本章的学习,读者需对Struts2拦截器的工作原理有更深的了解,能够很好的掌握拦截器的配置和使用方法,并且学会如何配置使用自定义拦截器。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号