struts2拦截器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Struts2 中的拦截器和 servelt 中的过滤器是非常的相似的。如果学过过滤器的话,肯定能够感觉的到,尽管有些微的不同。可是struts2的拦截器到底如何使用呢,为什么会有这些配置呢?接下来一一来看。
过滤器和拦截器是非常相似的,过滤器 public interface Filter 接口里面有三个方法:
∙init(FilterConfig filterConfig),
∙destroy(),
∙doFilter(ServletRequest request, ServletResponse response, FilterChain chain),
这里面的doFilter() 方法是最重要的,在struts2 中String intercept(ActionInvocation invocation)就相当于此方法。
如何完成一个拦截器呢?在 struts2 中要实现一个接口这个接口是什么呢?在哪呢?,是否在哪听说过?是 webwork 是我们以前听的最多的关于拦截器的框架, struts2 用了其中一个核心的东西,这个东西在是什么呢?是 xwork 。恩,有了它才可以拦截,好了我们在哪找呢?在com.opensymphony.xwork2.interceptor 中找,里面有个 Interceptor 这是个接口,里面也有三个方法,有 init, destroy 和 intercept 三个方法,而在struts2 里面的所有的拦截器都继承这个接口!
实现如下
1.Java代码package com.interceptor;
2.import com.opensymphony.xwork2.ActionInvocation;
3.import com.opensymphony.xwork2.interceptor.Interceptor;
4.
5.public class MyInterceptor implements Interceptor{
6. private String hello;//一定要写,后面会用上
7. get和set方法
8.
9. public void init() {
10. System.out.println("init");
11. }
12.
13. public String intercept(ActionInvocation invoker) throws Ex
ception {
14. System.out.println("intercept");
15.
16. String result=invoker.invoke();
17.
18. return result;
19. }
20.
21. public void destroy() {
22. System.out.println("destory");
23. }
24.}
为了看这些是怎么实现的,加入了一些打印!
intercept 方法返回一个字符串,这个里面最重要的是ActionInvocation 也是个抽象的接口,里面有个invoke() 方法
作用:Invokes the next step in processing this ActionInvocation. 即调用下一个拦截器,如果有的话!
拦截器进行了实现,但是如何让struts2知道我们写了个拦截器呢,此时必须在struts.xml中配置一下。如下所示
Xml代码
1.
2.
3.
4.
5.world
6.
7.
8.
9.
这里为了测试,用了一个虚拟的注册页面register.jsp 和 RegisterAction
Xml代码
1. > 2. 3. 4.
好了到了这里拦截器也配置好了,但是拦截器是拦截 action 的,怎么才能让action 被拦截呢?
一般的情况下,放在 result 后面,具体如下:
Xml代码
1.
将上面的配置整合起来就是:
Xml代码
1.
2.
3.
4.
5.world
6.
7.
8.
9.
10.
11.
12. ef> 13. 14. 15. 这样就可以让 Aciton 被拦截了,到此,好了,可以运行程序了: 输出结果是:启动服务器 init 被打出 运行后提交 action 输出 intercept 这个就是初步的一个拦截器。 ======= 在此可能出现一个问题,是什么呢?如果就我们做的注册程序而言,可以想一下,有数据转换,有数据校验,以前当转换和校验不符合的时候,点击提交,会提示相关错误信息,然而,此时当转换和校验依然不符合要求时,点击提交,却不会提示错误信息,为什么呢? ==== 当然你答对了,这些功能都包含在struts2的默认拦截器中,这里没执行是被添加的拦截器myinterceptor取代了。 为了查明原因可以查看一下struts2-core-2.xx.jar中的struts-default.xml 这个文件