1.拦截器:Struts2拦截器将一个Action要么Action的方法。之前或截取后场,和Struts2拦截器是可插拔,拦截器AOP一种实现.



WebWork:拦截器是动态拦截Action调用的对象。

它提供了一种机制能够使开发人员能够定义在一个Action运行的前后运行的代码。也能够在一个action运行前阻止其运行。

同一时候也提供了一种能够提取Action中可重用的代码的方式。

拦截器栈(Interceptor Stack):Struts2拦截器栈就是将拦截器按一定的顺序连接成一条链。在訪问被拦截的方法或字段时,Struts2拦截器链中的拦截器就会按其之前定义的顺序被调用。

2.拦截器的作用:

(1).DRY原则:Dont't Repeat Yourself.

(2).拦截器在设计和程序结构上的长处:

      拦截器能把非常多功能从Action中独立出来,分散到不同的拦截器里面。降低了Action的代码。

如此,拦截器和Action本身的功能都更单一了。

当通用的功能代码被封装在拦截器里面(代码模块化),就能够对不同的Action,依据功能须要,来配置对应功能的拦截器了。提高了拦截器所实现的功能的重用性,也变相实现了装配式和可插拔式的体系结构。使得整个系统结构变得更灵活。

a>.简化Action的实现

b>.功能更单一

c>.通用代码模块化

d>.提高重用性

注意:

拦截器採用责任链 模式 :

        (1).在责任链模式里,非常多对象由每个对象对其下一个的引用而连接起来形成一条链。

(2).责任链每个节点,都能够继续调用下一个节点。也能够阻止流程继续运行 

3.拦截器与过滤器的差别(要深刻理解):

(1).拦截器是基于java反射和动态代理机制的,而过滤器是基于方法回调的。

(2).过滤器依赖于servletAPI,而拦截器不依赖于servletAPI。

(3).拦截器仅仅能对Action请求起作用。而过滤器则能够对差点儿全部请求起作用。

(4).拦截器能够訪问Action上下文、值栈里的对象。而过滤器不能。

4.struts的拦截器(提前定义的拦截器:在struts-default.xml文件里)

拦截器演示样例1:



拦截器演示样例2:



5.Struts2运行原理图:





针对原理图的解释:

(1).client发送请求;

(2).该请求经过一系列的过滤器(Filter):当中可选过滤器ActionContextCleanUp,帮助Struts2和其它框架集成。

比如:SiteMesh Plugin。

(3).接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper,来决定该请求是否须要调用某个Action。

(4).若ActionMapper决定须要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy。

(5).ActionProxy通过Configuration Manager询问框架的配置文件,找到须要调用的Action类。

(6).ActionProxy创建一个ActionInvocation的实例。

(7).ActionInvocation实例调用Action的前后,涉及到相关拦截器(Intercepter)的调用。

(8).一旦Action运行完成,ActionInvocation负责依据struts.xml中的配置找到相应的返回结果。返回结果是一个JSP或其它页面(也能够是其它的Action链)。 JSP页面展现可使用Struts2框架中的标签(该过程会涉及ActionMapper)。

在上述过程中全部的对象(Action、Interceptors、Results等)都由xwork容器中的ObjectFactory创建。

6.每一个拦截器都是实现了 com.opensymphony.xwork2.interceptor.Interceptor接口的 Java 类:

init: 该方法将在拦截器被创建后马上被调用, 它在拦截器的生命周期内仅仅被调用一次. 能够在该方法中对相关资源进行必要的初始化

interecept: 每拦截一个动作请求, 该方法就会被调用一次. 

destroy: 该方法将在拦截器被销毁之前被调用, 它在拦截器的生命周期内也仅仅被调用一次. 

7.Intercepter接口

Struts2会依次调用程序猿为某个 Action 而注冊的每个拦截器的 interecept 方法.

每次调用 interecept 方法时, Struts 会传递一个 ActionInvocation 接口的实例. 

ActionInvocation: 代表一个给定动作的运行状态, 拦截器能够从该类的对象里获得与该动作相关联的 Action 对象和 Result 对象. 在完毕拦截器自己的任务之后, 拦截器将调用 ActionInvocation 对象的 invoke 方法前进到 Action 处理流程的下一个环节. 

还能够调用 ActionInvocation 对象的 addPreResultListener 方法给 ActionInvocation 对象 “挂” 上一个或多个 PreResultListener 监听器. 该监听器对象能够在动作运行完成之后, 開始运行动作结果之前做些事情

AbstractInterceptor 类实现了 Interceptor 接口. 并为 init, destroy 提供了一个空白的实现

8.自己定义拦截器步骤:

(1).自己定义拦截器类

(2).在 struts.xml 文件里配置自己定义的拦截器



版权声明:本文博客原创文章,博客,未经同意,不得转载。

struts详细解释拦截器的更多相关文章

  1. Struts 2的拦截器(Interceptor)总结

     什么是Struts 2拦截器? 从软件构架上来说,拦截器是实现了面向方面编程的组件.它将影响了多个业务对象的公共行为封装到一个个可重用的模块,减少了系统的重复代码,实现功能的高度内聚,确保了业务对象 ...

  2. Struts 2 之拦截器

    拦截器概述 Struts2拦截器是在访问某个Action或Action的某个方法,字段之前或之后实施拦截,并且Struts2拦截器是可插拔的,拦截器是AOP(Aspect Oriented Progr ...

  3. struts过滤器和拦截器的区别

    拦截器的工作原理:当接收到一个httprequest ,a) 当外部的httpservletrequest到来时 b) 初始到了servlet容器 传递给一个标准的过滤器链 c) FilterDisp ...

  4. struts自己定义拦截器--登录权限控制

    说明:该自己定义的拦截器实现用户登录的权限控制. login.jsp--->LoginAction--重定向-->MainAction--->main.jsp 一.1.整体的步骤: ...

  5. Struts的拦截器

    Struts的拦截器 1.什么是拦截器 Struts的拦截器和Servlet过滤器类似,在执行Action的execute方法之前,Struts会首先执行Struts.xml中引用的拦截器,在执行完所 ...

  6. Struts 2学习笔记——拦截器相关

    一.添加国际化支持 默认的struts-deault.xml文件中已经定义了国际化拦截器,内容如下 <!-定义国际化拦截器--> <interceptor name="i1 ...

  7. struts自定义拦截器

    第01步:配置web.xml,启动struts框架 <?xml version="1.0" encoding="UTF-8"?> <web-a ...

  8. struts拦截器

    struts中的拦截器相当于过滤器的作用 一在struts.xml中配置拦截器或拦截器栈 <interceptors>!--全部的拦截器 <interceptor name=&quo ...

  9. [置顶] 使用struts拦截器+注解实现网络安全要求中的日志审计功能

    J2EE项目中出于安全的角度考虑,用户行为审计日志功能必不可少,通过本demo可以实现如下功能: 1.项目中记录审计日志的方法. 2.struts拦截器的基本配置和使用方法. 3.struts拦截器中 ...

随机推荐

  1. Instruments的使用 逻辑查错,内存泄漏分析等工具集

    原创文章,转载请注明 XCode 开发后期,要对代码进行改进和优化,查内存泄漏是其中一项重要工作,今天下午偷了点时间,把前段时间的代码稍微整理了一下,顺带用了下这个工具,还真发现了些问题.这里记录一下 ...

  2. PHP Html 弹窗,本页面弹窗子页面

    echo '<script type=text/javascript>window.open("","name1","width=100, ...

  3. 一步一步学android之事件篇——触摸事件

    触摸事件顾名思义就是触摸手机屏幕触发的事件,当用户触摸添加了触摸事件的View时,就是执行OnTouch()方法进行处理,下面通过一个动态获取坐标的例子来学习OnTouchListener事件,效果如 ...

  4. 采用keepalived施工可用性MySQL-HA

    描述了使用keepalived施工可用性MySQL-HA,两个保证MySQL数据一致性,然后,keepalived虚拟IP,经keepalived内置的在线监测功能来实现MySQL. AD: 关于My ...

  5. Screwturn搭建企业内部wiki

    企业内部WIKI搭建 本文所使用的是Screwturn 基于asp.net webform和Sql server的. 仅仅要把本文资源下载下来,直接用IIS部署,然后更改web.config的conn ...

  6. WEB-INF文件夹的位置和作用

    WEB-INF简介 TomCat 服务器下的WEB-INF文件夹是一个非常安全的文件,在页面中不能直接访问其中的文件,必须通过web.xml文件对要访问的文件进行相应映射才能访问. WEB-INF文件 ...

  7. 【前段开发】行内元素和块级元素总结(HTML CSS)

    块级元素 <address> information on author <blockquote> long quotation <button> push but ...

  8. Windows Phone开发(9):关于页面状态

    原文:Windows Phone开发(9):关于页面状态 按照一般做法,刚学会如何导航,还是不够的,因为要知道,手机里面的每个页面,就如同Web页面一样,是无状态的. 啥是无状态?如果我们玩过Web开 ...

  9. 用C设计,用C++编码

          昨天晚上看到刘江的blog又补充了好几大段,今天早上又看到云风的人肉trackback,果然还是这种话题引人关注. 云风先是提了一下所谓C++带来的思想包袱(文言文曰“心智包袱”)问题,然 ...

  10. Atitit.软件的仪表板(8)--os子系统--监控资源使用情况

    Atitit.软件的仪表板(8)--os系统--资源占用监測 CPU使用 内存使用 磁盘队列 任务管理器 网络速度 插件列表( 资源管理器插件,浏览器插件,360optim) 启动项管理  (350) ...