- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Struts2拦截器和转换器 回顾 Struts2标签简介 非UI标签 控制标签 数据标签 UI标签 表单标签 非表单标签 主题和模板 目标 Struts2拦截器 拦截器简介 自定义拦截器 拦截器配置初步 Struts2内置拦截器 拦截器实例 Struts2转换器 内置转化器 自定义转换器 拦截器简介 拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。Struts2的拦截器类似过滤器,它也默认有init();destroy(); 也有拦截器链,也需要配置。实际上在Struts2框架中有很多拦截器的实现,如国际化、转换器,校验等。 拦截器的工作原理如上图,每一个Action请求都包装在一系列的拦截器的内部。拦截器可以在Action执行之前做相似的操作也可以在Action执行之后做回收操作。 ? 每一个Action既可以将操作转交给下面的拦截器,Action也可以直接退出操作返回客户既定的画面。 自定义拦截器 自定义一个拦截器需要三步: 1 自定义一个实现Interceptor接口(或者继承自AbstractInterceptor)的类。 2 在strutx.xml中注册上一步中定义的拦截器。 3 在需要使用的Action中引用上述定义的拦截器,为了方便也可将拦截器定义为默认的拦截器,这样在不加特殊声明的情况下所有的Action都被这个拦截器拦截。 自定义拦截器 Interceptor接口声明了三个方法: public interface Interceptor extends Serializable { void destroy(); void init(); String intercept(ActionInvocation invocation) throws Exception; } ? Init方法在拦截器类被创建之后,在对Action镜像拦截之前调用,相当于一个post-constructor方法,使用这个方法可以给拦截器类做必要的初始话操作。 Destroy方法在拦截器被垃圾回收之前调用,用来回收init方法初始化的资源。 Intercept是拦截器的主要拦截方法,如果需要调用后续的Action或者拦截器,只需要在该方法中调用invocation.invoke()方法即可,在该方法调用的前后可以插入Action调用前后拦截器需要做的方法。如果不需要调用后续的方法,则返回一个String类型的对象即可,例如Action.SUCCESS。 另外AbstractInterceptor提供了一个简单的Interceptor的实现,这个实现为: public abstract class AbstractInterceptor implements Interceptor { public void init() {} public void destroy() {} public abstract String intercept(ActionInvocation invocation) throws Exception; } 在不需要编写init和destroy方法的时候,只需要从AbstractInterceptor继承而来,实现intercept方法即可。 自定义拦截器 我们尝试编写一个Session过滤用的拦截器,该拦截器查看用户Session中是否存在特定的属性(LOGIN属性)如果不存在,中止后续操作定位到LOGIN,否则执行原定操作,代码为: public class CheckLoginInterceptor extends AbstractInterceptor { public static final String LOGIN_KEY = LOGIN; public static final String LOGIN_PAGE = global.login; public String intercept(ActionInvocation actionInvocation) throws Exception { System.out.println(begin check login interceptor!); // 对LoginAction不做该项拦截 Object action = actionInvocation.getAction(); if (action instanceof LoginAction) {
文档评论(0)