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.标识的拦截器,这个话说偶然间看了看,自己还没敲例子,等以后有时间在来说说这个吧
竟然以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.标识的拦截器,这个话说偶然间看了看,自己还没敲例子,等以后有时间在来说说这个吧
相关文章推荐
- Struts2 拦截器 默认Action 一些常量的设置 Result常用的结果类型
- Struts2拦截器的一些使用方法
- struts2自定义拦截器 设置session并跳转
- struts2的一些用法(二):类型转换
- 一些struts2和myeclipse的简单设置
- struts2设置拦截器不拦截某请求
- Notification的一些简单的设置和简单的用法
- Struts2的一些用法
- 防止表单重复提交(拦截器)一些struts2标签的使用
- 关于struts2中default-action-ref的一些问题及首页设置
- 学习struts2的笔记--顺便学习博客写法---struts2的一些拦截器(部分)
- struts2的一些用法(四):部分数据验证
- Struts2拦截器设置例外情况
- struts2 重复提交拦截器用法 token与token-session
- struts2中的OGNL一些用法补遗
- jsp中一些jQuery用法以及struts2标签的使用
- struts2中 拦截器中参数的设置
- c标签和struts2标签一些用法上的区别
- Struts2文件上传在配置fileUpload拦截器中设置文件大小无效的问题
- struts2的一些用法(五):struts2+Spring整合