《Java从入门到放弃》入门篇:Struts2的拦截器基本语法
拦截器,顾名思义,是拦截不是打劫!!!(图片来自于网络,如果有版权或道德问题,请通知本博主删除,谢谢)
闲扯完了,回到正题,struts2中的拦截器到底是什么东东呢?我们来百度一下···
呃,错了,我们来回顾一下,我们这种熟练工当然不需要百度来查了!!!
记住,是回顾,回顾,回顾!!!
咳~,请打开我的第二篇博客,看到那张struts2的原理图了没,在Action上下有很多的
interceptor,这个就是拦截器,struts2默认配置了很多拦截器,具体的内容,大家可以打开struts2-core-2.2.1.jar中的struts-default.xml文件,看看里面的配置信息。
像前面我们的Action中定义的属性如何得到页面传递的数据,就是拦截器的作用。
还有上一篇写的数据校验方法validate为什么能够自动调用,也是拦截器的作用。
一不小心,又聊了五毛钱的废话,好吧,进入正题!!!
接下来我们就聊聊如果自定义拦截器。至于是劫财,还是劫色,那就看各位看官的意思了···
(再次声明,图片来源于网络,有问题请联系博主)
struts2中的自定义拦截器有两种,一种劫财,一种劫色!!!
啊呸,是一种拦截类(类中的所有方法都拦截),一种拦截方法!!!
-
AbstractInterceptor(类拦截器)
-
MethodFilterInterceptor(方法拦截器)
具体用法如下:
一、AbstractInterceptor(类拦截器)
1.1)自定义类MyInterceptor继承AbstractInterceptor,并实现对应方法
1
2
3
4
5
6
7
8
9
10
|
public class MyInterceptor extends AbstractInterceptor { @Override public String intercept(ActionInvocation invocation) throws Exception { String result; System.out.println( "Action执行之前进行拦截!" ); result = invocation.invoke(); //表示我黑风岭劫完了,你可以去下一站了 System.out.println( "截完了,继续吧..." ); return result; } } |
1.2)修改struts.xml,添加拦截器,并使用该拦截器拦截对应的Action
1
2
3
4
5
6
7
8
9
10
11
12
|
< package name = "default" namespace = "/" extends = "struts-default" > < interceptors > < interceptor name = "myInterceptor" class = "com.pxy.interceptor.MyInterceptor" ></ interceptor > </ interceptors > <!-- 通配符方式调用 --> < action name = "smng_*" class = "com.pxy.action.Hello" method = "{1}" > < result name = "{1}" >/WEB-INF/jsp/singer_{1}.jsp</ result > < result name = "input" >/WEB-INF/jsp/singer_{1}.jsp</ result > <!-- 绑定拦截器 --> < interceptor-ref name = "myInterceptor" ></ interceptor-ref > </ action > </ package > |
1.3)访问http://localhost:8888/strutsDemo/smng_xxx.action查看结果。(这儿的xxx替换成CURD方法)
二、MethodFilterInterceptor(方法拦截器)
现在我们只拦截deletet和select方法。实现步骤如下:
2.1)修改自定义类MyInterceptor,让其继承MethodFilterInterceptor类,并实现对应方法
1
2
3
4
5
6
7
8
9
10
|
public class MyInterceptor extends MethodFilterInterceptor { @Override protected String doIntercept(ActionInvocation invocation) throws Exception { String result; System.out.println( "Action执行之前进行拦截!" ); result = invocation.invoke(); System.out.println( "截完了,继续吧..." ); return result; } } |
2.2)修改struts.xml文件,并配置拦截器要拦截的方法
1
2
3
4
5
6
7
8
|
<!-- 通配符方式调用 --> < action name = "smng_*" class = "com.pxy.action.Hello" method = "{1}" > < result name = "{1}" >/WEB-INF/jsp/singer_{1}.jsp</ result > < result name = "input" >/WEB-INF/jsp/singer_{1}.jsp</ result > < interceptor-ref name = "myInterceptor" > < param name = "includeMehtods" >delete,select</ param > </ interceptor-ref > </ action > |
2.3)访问http://localhost:8888/strutsDemo/smng_xxx.action查看结果。
好了,关于如果拦截收过路费的问题,我们就研究到这儿
至于各位客官想截什么,接下来可以自己玩玩了···