您的位置:首页 > 编程语言 > Java开发

struts2的一些用法(三):3.拦截器的设置

2008-12-13 14:22 316 查看
struts2的拦截器是基于AOP的机制,底层应用的是JDK代理,挺白痴的,明明CGlib更好一些的技术,
竟然以JDK的动态代理作为主轴,勉强可以用面向接口编程来解释,不过局限性差到让人落泪,设计的人脑袋坏了不成;

拦截器本身也算是struts2的亮点之一,不过与spring的AOP相比,的确是相形见拙;

1.现在说说拦截器,连接器本身需要继承接口或者抽象类,抽象类:AbstractInterceptor
他是在第二层的应用:
第一层:转换数据类型;
第二层:拦截器;
第三层:Action
也就是说,struts2表单传值时需要通过拦截器进行封装的,这就需要struts2的默认拦截器,<interceptor-ref name="defaultStack" />
注意:默认拦截器是在不设置任何拦截器的时候,给予默认设置的,当时只要设置任何一个连接器他否会覆盖掉默认拦截器,
故此,我们需要手动设置,如下:
<struts>
<package name="struts" extends="struts-default" >
<interceptors>
<interceptor name="work" class="interceptor.Work_Interceptor"></interceptor>
//设置拦截器!
</interceptors>
<action name="login" class="com.struts.action.UserAction" method="add">
<interceptor-ref name="work"></interceptor-ref>
//在此Action上应用此连接器;
<interceptor-ref name="defaultStack" />
//设置默认连接器;
<result name="sueecc">/sueecc.jsp</result>
</action>
</package>
</struts>
2.拦截器的执行顺序:
是根据配置文件的顺序;
如果有三个拦截器分别是拦截器一,拦截器二,拦截器三;
执行顺序:拦截器一->拦截器二->拦截器三->action->拦截器三->拦截器二->拦截器一

3.拦截器可以依赖注入:

写入值分为两种Ioc与非Ioc;

非Ioc存值:
action中:
ActionContext.getContext();

Ioc注入:
Ioc拥有两种注入方式:初始注入,动态注入
初始注入:
<interceptors>
<interceptor name="work" class="interceptor.Work_Interceptor">
<param name="wang">1234</param>
//初始注入
</interceptor>
</interceptors>

动态注入:
<action name="login" class="POJO.User" >
<interceptor-ref name="work">
<param name="wang">1234</param>
//动态注入
</interceptor-ref>
<result name="succee">/succee.jsp</result>
<result name="input">/index.jsp</result>
</action>
4.自定义的默认拦截器:
<default-interceptor-ref name=""></default-interceptor-ref>
//默认拦截器,他可以让所有的action都默认使用你定义的这个拦截器;
5.具体方法拦截器 MethodFilterInterceptor struts.xml:
<interceptor name="myInterceptor3" class="com.test.interceptor.MyInterceptor3">
<param name="includeMethods">拦截的方法名</param>
</interceptor>
拦截器:

public class MyInterceptor3 extends MethodFilterInterceptor {
protected String doIntercept(ActionInvocation invocation) throws Exception {
System.out.println("my interceptor3");
String result = invocation.invoke();
return result;
}
}

User u = (User) invocation.getAction();
//返回action的对象,赋值后的对象;
6.监听器(PreResultListener):
监听器的初始点是拦截器或者是自定义方法;

7.拦截器与过滤器的区别:
1.拦截器是基于反射机制,过滤器是基于函数回调的;
2.过滤器是依赖servlet,拦截器是不依赖于servlet容器;
3.拦截器只能对action的请求起作用,而过滤器是对任何请求起作用;
4.拦截器可以访问actionContext,值栈里的对象.而过滤器不能;
5.action的生命周期中,一个拦截器可以被调用多次,而过滤器只能调用一次;

8.标识的拦截器,这个话说偶然间看了看,自己还没敲例子,等以后有时间在来说说这个吧

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: