日期:2014-05-17  浏览次数:20754 次

struts2默认拦截器作用?什么时候拦截
HTML code

        <!-- 默认拦截器 -->
        <default-interceptor-ref name="defaultStack"/>



  在struts.xml中这样配置了,defaultStack这个拦截器会拦哪个action?是不是在用户输入一个不存在的,如乱输一个8d6ht5fv.action,就会调用defaultStack这个拦截器?
  defaultStack没有对应的类,那它能做什么?
  defaultStack顾名思意是默认拦截器,那我在struts.xml不写<default-interceptor-ref name="defaultStack"/>是不是就相当于写了?不写也能起到拦截的作用?

------解决方案--------------------
struts2是基于拦截器弄成的,defaultStack会拦截所有的action不仅仅是乱输入,它会做很多事情,最重要一个是获得页面传参。你查看源码就知道了。这个不用我们手动去配置的,在struts-default.xml里就有配置。如果我们要另外写自己的拦截器才要配置这个,不然struts2就没什么作用了。
------解决方案--------------------
在struts.xml中这样配置了,defaultStack这个拦截器会拦哪个action?是不是在用户输入一个不存在的,如乱输一个8d6ht5fv.action,就会调用defaultStack这个拦截器?

1,会拦截所有action
2,是不是在用户输入一个不存在的,如乱输一个8d6ht5fv.action,你乱输入一个,struts2会先寻找相对应的action,action都没找到,怎么拦截?
------解决方案--------------------
如果你在<package name="login" extends="struts-default" namespace="/"> 中extends 了这个过滤器,那它就会拦截这个package下得action。
你也可以自定义一些过滤器但是你要注意自定义了拦截器后,默认拦截器就会失效,而如果你定义了自己的拦截器就要继承一些支持struts运行的默认拦截器,否则struts不能正常运行~
------解决方案--------------------
在运行action之前进行拦截,可用于权限控制。
------解决方案--------------------
1. 理解拦截器
1.1. 什么是拦截器:拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。

在Webwork的中文文档的解释为——拦截器是动态拦截Action调用的对象。它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行。同时也是提供了一种可以提取action中可重用的部分的方式。

谈到拦截器,还有一个词大家应该知道——拦截器链(Interceptor Chain,在Struts 2中称为拦截器栈Interceptor Stack)。拦截器链就是将拦截器按一定的顺序联结成一条链。在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。

1.2. 拦截器的实现原理:大部分时候,拦截器方法都是通过代理的方式来调用的。Struts 2的拦截器实现相对简单。当请求到达Struts 2的ServletDispatcher时,Struts 2会查找配置文件,并根据其配置实例化相对的拦截器对象,然后串成一个列表(list),最后一个一个地调用列表中的拦截器。如下图: