Struts2 拦截器

拦截器的概念

拦截器(Interceptor)是Struts2的核心组成部分。很多功能都是构建在拦截器基础之上的,例如文件的上传和下载、国际化、转换器和数据校验等,Struts2利用内建的拦截器,完成了框架内的大部分操作。

在Struts2文档中对拦截器的解释为--拦截器是动态拦截Action调用的对象。它提供了一种机制,使开发者可以定义一个特定的功能模块,这个模块可以在Action执行之前或者之后运行,也可以在一个Action执行之前阻止Action执行。同时也提供了一种可以提取Action中可重用的部分的方式。

拦截器是Struts2 更高层次的解耦,无须侵入框架本身便可以添加新的功能。

拦截器是AOP( Aspect-Oriented Programming)的一种实现,底层通过动态代理模式完成。

Struts2拦截器实现原理

Struts 2的拦截器实现相对简单。当请求到达Struts 2的StrutsPrepareAndExecuteFilter时,Struts 2会查找配置文件,并根据其配置实例化相对的拦截器对象,然后串成一个列表(list),最后一个一个地调用列表中的拦截器 。

拦截器与过滤器区别

区别: 拦截器是基于java的反射机制的,而过滤器是基于函数回调。 拦截器不依赖与servlet容器,而过滤器依赖与servlet容器。 拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。 拦截器可以访问action上下文、值栈里的对象,而过滤器不能。 在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次

Struts2内置拦截器

Struts2内建了大量的拦截器,这些拦截器以name-class对的形式配置在struts-default.xml文件中,其中name是拦截器的名字,就是以后使用该拦截器的唯一标识;class则指定了该拦截器的实现类,如果我们定义的package继承了Struts2的struts-default包,则可以自由使用下面定义的拦截器,否则必须自己定义这些拦截器。

 

posted @ 2017-03-20 15:14  污界清流  阅读(111)  评论(0)    收藏  举报