Struts2 拦截器

拦截器是Struts2最强大的特性之一,它是一种可以让用户在Action执行之前和Result执行之后进行一些功能处理的机制。Struts2框架中提供的许多功能都是使用拦截器实现的,包括异常处理,文件上传,生命周期回调和验证等。

使用拦截器的优点:
1. 简化Action的实现。拦截器能把很多功能从Action中独立出来,大量减少了Action的代码。
2. 单一责任性。将更加具体的功能从Action中分离出来,分散到不同的拦截器中,这样每个拦截器的功能,以及Action本身的功能就更单一了。
3. 提高代码的重用型。Java是一门面向对象的语言,当具有相同功能的代码被封装在拦截器中,就可以对不同的Action,根据功能需要,来配置相同的拦截器了。

拦截器的的调用顺序:
拦截器是按照配置顺序执行的,也就是说谁配置在前面,谁就会先执行。但是有一个点必须要注意:Struts2默认拦截器需要配置在自定义拦截器之前。

Struts2框架一些重要的拦截器:

No. 拦截器和说明
1 alias:允许参数在请求之间使用不同的别名。
2 checkbox:通过为未检查的复选框添加参数值false,以辅助管理复选框。
3 conversionError:将字符串转换为参数类型的错误信息放置到action的错误字段中。
4 createSession:自动创建HTTP会话(如果尚不存在)。
5 debugging:为开发人员提供一些不同的调试屏幕。
6 execAndWait:当action在后台执行时,将用户发送到中间的等待页面。
7 exception:映射从action到结果抛出的异常,允许通过重定向自动处理异常。
8 fileUpload:便于文件上传。
9 i18n:在用户会话期间跟踪选定的区域。
10 logger:通过输出正在执行的action的名称提供简单的日志记录。
11 params:设置action上的请求参数
12 prepare:这通常用于执行预处理工作,例如设置数据库连接。
13 profile:允许记录action的简单分析信息。
14 scope:在会话或应用程序范围内存储和检索action的状态。
15 ServletConfig:提供可访问各种基于servlet信息的action。
16 timer:以action执行时间的形式提供简单的分析信息。
17 token:检查action的有效性,以防止重复提交表单。
18 validation:提供action的验证支持。

创建一个自定义的interceptor

其实主要是实现Interceptor接口,里面有init(),destroy(),intercept(ActionInvocation arg0)这三个方法。intercept(ActionInvocation arg0)才是真正的拦截器。

关于interceptor与Filter区别
1. 拦截器是基于java反射机制的,而过滤器是基于函数回调的。
2. 过滤器依赖于servlet容器,而拦截器不依赖于servlet容器。
3. 拦截器只能对Action请求起作用,而过滤器则可以对几乎所有请求起作用。
4. 拦截器可以访问Action上下文、值栈里的对象,而过滤器不能。
5. 在Action的生命周期中,拦截器可以多次调用,而过滤器只能在容器初始化时被调用一次。
interceptor 可以在其他环境中使用,而Filter只能在Web环境中使用。

猜你喜欢

转载自blog.csdn.net/wangchengming1/article/details/79130155