`

struts2 拦截器的实现机制

 
阅读更多

1 我们都知道strus2中的拦截器是struts2 的一个核心。

  想看struts2的拦截机制,我们首先要看strus2的入口,也就是在web.xml中配置的过滤器。



  首先说一下这个ActionMapping这个类,这个类的作用就是存储了action的信息,和执行流程的ActionFoward信息。所以在配置了action中信息之后,mapping的信息肯定不能为空,然后我们查看下面execute.executeAction 方法,我们跟进查看之后。

 我们再次跟进,我们可以在核心代码中,看到产生了代理对象,



 根据struts2的流程图,我们知道这个ActionProxy创建了一个ActionInvocation,也就是相当于jdk动态代理中的InvocationHandler,我们查看这个ActionInvocation,发现这个是一个接口,我们查看他的实现类,我们查看defaultActionInvocation。
 通过源代码阅读,我们查看该类中的init方法。

 

  List<InterceptorMapping> interceptorList = new ArrayList<InterceptorMapping>         (proxy.getConfig().getInterceptors());
        interceptors = interceptorList.iterator();

 

上面的就是把所有的拦截器放在了ArrayList里面,然后那个intercepts就是这个集合的迭代器。

 

我们查看这个便利的核心方法invoke方法,在invoke方法中我们查看核心代码,我们发现它便利了这个迭代器,

 

下面是我的一个拦截器。我们发现在我们自己的拦截器中,它调用了invoketion中的invoke方法,也就是上面的方法

 

 

下面让我用一张图片更好的诠释一下。这个递归。

 

  首先resultCode = interceptor.getInterceptor().intercept(DefaultActionInvocation.this);我们发现它把自己传递了过去,然后我们调用ai.invoke的时候,它又调用了自己,这个时候是递归进行访问,然后迭代器next,运行下一个拦截器。这样操作,就完成了拦截器的操作,当拦截器访问完成之后,返回一个结果试图。也就是倒数第三张图片的resultCode。

 

  下面简单说一下拦截器和过滤器之间的区别

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

 

 

  • 大小: 132.9 KB
  • 大小: 8.1 KB
  • 大小: 5.6 KB
  • 大小: 18.9 KB
  • 大小: 8.8 KB
  • 大小: 127.2 KB
  • 大小: 127.2 KB
分享到:
评论

相关推荐

    拦截器机制及其实现原理

    拦截器是Struts2框架的核心组成部分,通过本章的学习,应该掌握如下知识点: 了解AOP设计思想。 能够使用AOP设计思路,分离横切关注点 掌握Java中提供的动态代理方式实现拦截 了解拦截在开发中的意义 掌握Struts2...

    理解拦截器用于在某个方法或字段被访

    谈到拦截器,还有一个词大家应该知道——拦截器链(Interceptor Chain,在Struts 2中称为拦截器栈Interceptor Stack)。拦截器链就是将拦截器按一定的顺序联结成一条链。在访问被拦截的方法或字段时,拦截器链

    Struts2框架实现图书管理系统

    用Struts2框架实现图书管理系统的简单的增删改查操作,并且有一点拦截器的功能。

    Struts2入门教程(全新完整版)

    6.使用拦截器实现权限验证 35 7.拦截器中的注解 37 8.使用PreResultListener实现回调 39 六、使用标签 40 1.基础表单标签 40 2.单选按钮和复选框: 41 3.三种方式实现下拉列表 41 4.二级联动 42 5.其它表单标签 44 6...

    Struts2详细工作流程

    Struts 2框架本身大致可以分为3个部分:核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件...Struts 2框架按照模块来划分,可以分为Servlet Filters、Struts核心模块、拦截器和用户实现部分。

    深入浅出struts2

    开发人员还可以通过拦截器(可以自定义拦截器或者使用Struts2提供的拦截器)来对请求进行预处理和后处理,这样一来,处理请求就变得更加模块化,从而进一步减小耦合度。模块化是一个通用的主题——可以通过插件机制...

    Struts2 入门培训

    4 1.3.2. 受控目录 5 2. 入门例子 5 2.1. 项目 5 2.2. 在WEB.XML中,配置FILTERDISPATCHER过滤器 6 2.3. 配置STRUTS.PROPERTIES 6 2.4. 编写一个简单的ACTION类 7 2.5. STRUTS.XML配置文件 8...

    struts项目学习笔记

    基于AOP(面向切面编程)思想的拦截器机制,更易扩展(不修改源代码的条件下,增强代码功能) 更强大、更易用输入校验功能 整合Ajax支持:json插件 Struts2的今生前世: 1.早期开发模型Servlet+JSP+JavaBean显得...

    利用java filter 实现业务异常拦截源码

    利用java filter 实现业务异常拦截 跳转到错误信息提示页面 我们在做项目中肯定都会遇到自定义业务异常 ,然后将业务异常信息跳转的统一的信息提示页面的情况,比如我们在struts的时候我们会用到struts的异常处理...

    精讲Struts2

    精简全面讲解Struts 2.0Struts2产生背景 工作原理 实现步骤 标签 命名空间 转换器 国际化 输出 令牌机制 拦截器 表单校验(jQuery.validate验证框架) 上传 下载 OGNL(ActionContext StackContext ValueStack区别)

    低清版 大型门户网站是这样炼成的.pdf

    2.6.1 struts 2内建拦截器介绍 95 2.6.2 定义和使用拦截器栈 97 2.6.3 使用自定义拦截器 98 2.7 小结 100 第3章 struts 2标签库详解与ajax技术应用 103 3.1 struts 2主题与模板 103 3.2 struts 2控制标签详解 ...

    Java Web程序设计教程

    6.1.1拦截器工作机制 110 6.1.2拦截器及拦截器栈的应用 111 6.1.3自定义拦截器 115 6.2类型转换器 117 6.2.1struts2内置类型转换器 117 6.2.2引用类型的转换方式 117 6.2.3特殊对象的类型转换 118 6.2.4类型...

    宿舍管理系统

    Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。虽然从Struts 1到Struts 2有着太大的变化,...

    达内Java培训项目(当当网/通用电子商务系统)

    使用拦截器机制来限制未登录用户对购买、结算等Action的访问,保证了系统的健壮性。 对分页进行了组建化封装,提高了系统的通用性。 层与层之间采用接口连接,面向接口编程使得系统结构良好。 经验总结: 通过该...

    Spring开发指南

    XWork 拦截器体系 输入校验 国际化支持 Webwork2 in Spring Struts in Spring 数据持久层 事务管理 持久层封装 JDBC Hibernate in Spring ibatis in Spring Aspect Oriented Programming AOP 概念 ...

    J2EE应用开发详解

    124 8.5.2 拦截器的实现原理 124 8.5.3 Struts2的内置拦截器 124 8.5.4 拦截器的配置和使用 125 8.5.5 自定义拦截器 126 8.6 一个简单的Struts2应用 130 8.7 小结 140 第9章 JSF 141 9.1 JSF技术简介 141 9.1.1 JSF...

    计算机科学系毕业设计论文范文

    Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与Servlet API完全脱离开,所以Struts 2可以理解为WebWork的更新产品。因为Struts 2和Struts 1有着太大的变化,...

    Java面试宝典2020修订版V1.0.1.doc

    拦截器和过滤器的区别? 91 11、struts.xml中result的type有哪些类型? 91 12、什么时候用JDBC什么时候用Hibernete; 91 13、hibernate 数据的三个状态 91 14、Hibernate中load和get的区别? 92 15、Hibernate的工作...

    JAVA程序开发大全---上半部分

    8.2.3 Struts配置文件编辑器 124 8.3 Struts应用实例:登录系统 125 8.4 本章小结 133 第9章 Hibernate框架的开发及应用 134 9.1 Hibernate框架概述 134 9.1.1 O/R Mapping(对象/关系映射)技术 134 9.1.2 ...

Global site tag (gtag.js) - Google Analytics