struts2中的拦截器
struts2中的拦截器
Struts2的拦截器基本概念
在Webwork的中文文档的解释为 : 拦截器是动态拦截Action调用的对象。
是struts2中的一个核心技术
它提供了一种机制
可以使开发者在定义的action执行的前后加入执行的代码,也可以在一个action执行前阻止其执行。
也就是说它提供了一种可以提取 action中可重用代码,统一管理和执行的方式。
拦截器和过滤器的区别
-
区别
过滤器是 servlet规范中的一部分,任何java web工程都可以使用。
拦截器是 struts2 框架自己的,只有使用了struts2 框架的工程才能用。
- 过滤器在 url-pattern中配置了/*之后,可以对所有要访问的资源拦截。
-
拦截器它是只有进入 struts2 核心内部之后,才会起作用,如果访问的是 jsp,
html,css,image 或者 js是不会进行拦截的。 - 同时,拦截器还是AOP编程思想的具体体现形式。AOP(Aspect-Oriented Programming)简单的
说就是:
在不修改源码的基础上,已有的方法进行动态增强。 - 在 struts2中,拦截器它就是对我们的动作方法进行增强。 (其实就是把重复性的代码提取出来,
然后放到拦截器中,统一管理,统一调用)
拦截器的作用
Struts2 中的很多功能都是由拦截器完成的。
我们在第一天介绍 struts2 配置文件时,介绍了名称为
struts-default.xml 的配置文件,该配置文件中有 struts2 框架给我们提供的很多拦截器。比如:
servletConfig,staticParam,params,modelDriven 等等。我们通过实现接口方式获取 ServletAPI以及
模型驱动封装请求参数,都是拦截器在帮我们做。
拦截器的执行时机
- 在访问struts2 核心内部时,在动作方法执行之前先正序执行,然后执行动作方法,执行完动作方法和结果视图之后,再倒序执行。所以它是先进后出,是个栈的结构。具体可参考下图: