struts2拦截器

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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./register.jsp

3./success.jsp

4.

好了到了这里拦截器也配置好了,但是拦截器是拦截 action 的,怎么才能让action 被拦截呢?

一般的情况下,放在 result 后面,具体如下:

Xml代码

1.

将上面的配置整合起来就是:

Xml代码

1.

2.

3.

4.

5.world

6.

7.

8.

9.

10. /register.jsp

11. /success.jsp

12.

ef>

13.

14.

15.

这样就可以让 Aciton 被拦截了,到此,好了,可以运行程序了:

输出结果是:启动服务器 init 被打出

运行后提交 action 输出 intercept

这个就是初步的一个拦截器。

=======

在此可能出现一个问题,是什么呢?如果就我们做的注册程序而言,可以想一下,有数据转换,有数据校验,以前当转换和校验不符合的时候,点击提交,会提示相关错误信息,然而,此时当转换和校验依然不符合要求时,点击提交,却不会提示错误信息,为什么呢?

====

当然你答对了,这些功能都包含在struts2的默认拦截器中,这里没执行是被添加的拦截器myinterceptor取代了。

为了查明原因可以查看一下struts2-core-2.xx.jar中的struts-default.xml 这个文件

相关文档
最新文档