struts详细解释拦截器

struts详细解释拦截器

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

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:

struts详细解释拦截器

拦截器演示样例2:

struts详细解释拦截器

5.Struts2运行原理图:

struts详细解释拦截器

针对原理图的解释:

(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 文件里配置自己定义的拦截器

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117455.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 补码的加减法运算_简述补码减法运算的规则

    补码的加减法运算_简述补码减法运算的规则补码的加减法运算本文内容参考自王达老师的《深入理解计算机网络》一书<中国水利水电出版社>一、补码加法:1、补码的加法运算两个机器数相加的补码可以先通过分别对两个机器数求补码,然后再相加得到,在采用补码形式表示时,进行加法运算可以把符号位和数值位一起进行运算(若符号位有进位,导致了益出,则直接舍弃),结果为两数之和的补码形式。示例1:求两个十进制数的和35+18。首先,规…

    2025年11月12日
    3
  • Matlab plot绘图颜色详解

    Matlab plot绘图颜色详解转自:https://blog.csdn.net/jirryzhang/article/details/77374702MATLABplot画线的颜色设定plot中画线的颜色通常是八种:标记符颜色r红g绿b蓝c蓝绿m紫红y…

    2022年5月16日
    345
  • iozone使用简介

    iozone使用简介iozone 使用简介 iozone www iozone org 是一个文件系统的 benchmark 工具 可以测试不同的操作系统中文件系统的读写性能 可以测试 Read write re read re write readbackward readstrided fread fwrite randomread pread mmap aio read aio write 等等不同的模式下的硬盘的性能 命令详情 aAutomode AAuto2mode b

    2025年9月1日
    2
  • Spark存储体系底层架构剖析-Spark商业环境实战

    Spark存储体系底层架构剖析-Spark商业环境实战

    2021年6月15日
    123
  • pycharm设置项目路径_vscode和pycharm区别

    pycharm设置项目路径_vscode和pycharm区别#-*-coding=utf-8-*-#@Time:${DATE}${TIME}#@Author:Donvink${USER}#@Site:${SITE}#@File:${NAME}.py#@Software:${PRODUCT_NAME}

    2022年8月25日
    5
  • java Random.nextInt()方法

    java Random.nextInt()方法publicintnextInt(intn)该方法的作用是生成一个随机的int值,该值介于[0,n)的区间,也就是0到n之间的随机int值,包含0而不包含n。直接上代码:

    2022年7月4日
    28

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号