论文部分内容阅读
摘 要:针对程序设计过程中拦截机制的应用问题,讨论了拦截机制的实现原理,阐述拦截机制的适用场景;同时重点分析Java语言中的二种实现方式,并对比二种方式各自的优缺点,最后指出了拦截机制的重要作用。
关键词:拦截;过滤器;AOP代理;映射
拦截机制在各种面向对象编程语言中均有极其重要的位置,不同语言中的实现方式有所不同,即使在同一语言中也有多种实现方式。Java语言中的拦截机制可以通过过滤器、Struts框架拦截器、Spring框架AOP代理等方式去进行实现。
1 拦截机制原理分析
拦截组件是一个服务器端的构件,它可以截取客户端的请求与响应信息,以便查阅、提取或操作客户机和服务器之间正在交换的数据,其原理如图1所示。首先,各种形式的客户端向应用服务发送请求;其次,各种请求在到达真正目标服务前会被拦截组件所截获,并交由请求拦截方法处理,处理完毕后放行,请求才能到达真正的目标;第三,目标服务业务逻辑处理完成后,向客户端发送响应结果;第四,目标服务返回的影响结果同样会被拦截组件所截获,并交由响应拦截方法处理,处理完毕才真正返回到客户端。
拦截机制主要应用于以下场景:1)日志模块:通过拦截用户的每一个操作,可记录其行为特征及操作过程,以便于将来的审计、检查、核对;2)权限模块:通过截获用户的每一个请求,检查其合法性,是否拥有所请求的数据资源或权限资源,以对请求对行权限控制;3)资源管理模块:通过统一拦截控制进行资源初始化或释放及相关管理工作,如用户退出系统时进行公共拦截并释放相关资源;4)事务模块:在请求到达目标对象前截获并开启一个相关事务,在请求结束后,同样截获响应并提交或回滚事务,从而达到事务管理的目的。
2 Java的實现方式
Java编程语言中,拦截机制的实现方式多种多样,在各种不同的应用框架中都有自己的一套相应机制,下面主要对二种常见的、基本的实现方式进行分析、论述。
2.1 Servlet过滤器定义
过滤器(Filter)是Java拦截中最普通的一种实现方式,是SUN公司于2000年在Servlet2.3中新增加的功能,此种拦截方式适合于所有没有特殊要求web的应用系统中。
在Filter接口中有三个抽象方法:init方法在容器启动时被调用,负责资源初始化;doFilter方法是请求的拦截方法,负责请求数据合法性的检查;destroy方法在容器关闭时调用,负责资源的销毁、释放。自定义类需实现Filter接口,并在工程web.xml映射文件中配置好相应拦截。配置代码如下所示:
<!--拦截器定义 -->
authFilter
<!--自定义拦截类 -->
com.DemoFilter
<!--拦截规则定义 -->
authFilter
<!--表示拦截所有请求 -->
/*
2.2 Strust框架自定义拦截器
拦截器是Struts2框架的核心,拦截器可以让程序员在Action类被执行的前后嵌入相关的业务代码。Struts2拦截器的实现相对简单,请求到达Struts2的中央处理器FilterDispatcher时,会读取struts.xml配置文件中的拦截器配置,然后实例化相关对象,并按一定的规则顺序进行调用,此种拦截方式适合于用Struts框架构建的应用系统中。
自定义拦截类需实现Interceptor接口,接口有同样有:init、destory、intercept三个方法。请求到达Action的前后均会被intercept截获,通过参数ActionInvocation可取得对应的Action实例,并通过参数的实例对象中的invoke方法可以控制请求的流向。其相关配置如下代码所示:
<!-- 拦截器的定义 -->
<!-- 自定义拦截类 -->
<!-- 拦截器在Action中的引用 -->
/main.jsp
3 结语
拦截机制是Java语言的一个重要功能特征,其有助于提升面向横截面编程的能力,增强系统的健壮性,同时Java语言中存在多种不同的拦截实现方式,各自适应不同的应用场景,拦截机制如果应用不当导致性能低下、效率不佳等问题,因而不能滥用。
参考文献:
[1] 阳瑞发.基于拦截器的Web服务会话技术研究[J].制造业自动化,2015,37(20):54-55.
[2] 董慧慧.基于struts2拦截器的操作日志系统设计[J].计算机光盘软件与应用,2012(4):141-142.
[3] 王涛涛,李晓禹,施炜利.Struts2拦截器控制页面访问权限的设计与实现[J].计算机与现代化,2009(1):32-33,37.
关键词:拦截;过滤器;AOP代理;映射
拦截机制在各种面向对象编程语言中均有极其重要的位置,不同语言中的实现方式有所不同,即使在同一语言中也有多种实现方式。Java语言中的拦截机制可以通过过滤器、Struts框架拦截器、Spring框架AOP代理等方式去进行实现。
1 拦截机制原理分析
拦截组件是一个服务器端的构件,它可以截取客户端的请求与响应信息,以便查阅、提取或操作客户机和服务器之间正在交换的数据,其原理如图1所示。首先,各种形式的客户端向应用服务发送请求;其次,各种请求在到达真正目标服务前会被拦截组件所截获,并交由请求拦截方法处理,处理完毕后放行,请求才能到达真正的目标;第三,目标服务业务逻辑处理完成后,向客户端发送响应结果;第四,目标服务返回的影响结果同样会被拦截组件所截获,并交由响应拦截方法处理,处理完毕才真正返回到客户端。
拦截机制主要应用于以下场景:1)日志模块:通过拦截用户的每一个操作,可记录其行为特征及操作过程,以便于将来的审计、检查、核对;2)权限模块:通过截获用户的每一个请求,检查其合法性,是否拥有所请求的数据资源或权限资源,以对请求对行权限控制;3)资源管理模块:通过统一拦截控制进行资源初始化或释放及相关管理工作,如用户退出系统时进行公共拦截并释放相关资源;4)事务模块:在请求到达目标对象前截获并开启一个相关事务,在请求结束后,同样截获响应并提交或回滚事务,从而达到事务管理的目的。
2 Java的實现方式
Java编程语言中,拦截机制的实现方式多种多样,在各种不同的应用框架中都有自己的一套相应机制,下面主要对二种常见的、基本的实现方式进行分析、论述。
2.1 Servlet过滤器定义
过滤器(Filter)是Java拦截中最普通的一种实现方式,是SUN公司于2000年在Servlet2.3中新增加的功能,此种拦截方式适合于所有没有特殊要求web的应用系统中。
在Filter接口中有三个抽象方法:init方法在容器启动时被调用,负责资源初始化;doFilter方法是请求的拦截方法,负责请求数据合法性的检查;destroy方法在容器关闭时调用,负责资源的销毁、释放。自定义类需实现Filter接口,并在工程web.xml映射文件中配置好相应拦截。配置代码如下所示:
<!--拦截器定义 -->
<!--自定义拦截类 -->
<!--拦截规则定义 -->
<!--表示拦截所有请求 -->
2.2 Strust框架自定义拦截器
拦截器是Struts2框架的核心,拦截器可以让程序员在Action类被执行的前后嵌入相关的业务代码。Struts2拦截器的实现相对简单,请求到达Struts2的中央处理器FilterDispatcher时,会读取struts.xml配置文件中的拦截器配置,然后实例化相关对象,并按一定的规则顺序进行调用,此种拦截方式适合于用Struts框架构建的应用系统中。
自定义拦截类需实现Interceptor接口,接口有同样有:init、destory、intercept三个方法。请求到达Action的前后均会被intercept截获,通过参数ActionInvocation可取得对应的Action实例,并通过参数的实例对象中的invoke方法可以控制请求的流向。其相关配置如下代码所示:
<!-- 拦截器的定义 -->
<!-- 自定义拦截类 -->
<!-- 拦截器在Action中的引用 -->
3 结语
拦截机制是Java语言的一个重要功能特征,其有助于提升面向横截面编程的能力,增强系统的健壮性,同时Java语言中存在多种不同的拦截实现方式,各自适应不同的应用场景,拦截机制如果应用不当导致性能低下、效率不佳等问题,因而不能滥用。
参考文献:
[1] 阳瑞发.基于拦截器的Web服务会话技术研究[J].制造业自动化,2015,37(20):54-55.
[2] 董慧慧.基于struts2拦截器的操作日志系统设计[J].计算机光盘软件与应用,2012(4):141-142.
[3] 王涛涛,李晓禹,施炜利.Struts2拦截器控制页面访问权限的设计与实现[J].计算机与现代化,2009(1):32-33,37.