首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

struts2默认拦截器作用?什么时候拦截,该怎么解决

2012-01-24 
struts2默认拦截器作用?什么时候拦截HTML code!-- 默认拦截器 --default-interceptor-ref namedefaul

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),最后一个一个地调用列表中的拦截器。如下图:

 

热点排行