`

struts2拦截器总结

阅读更多
以下是struts2拦截器的内容:
Struts2运转流程图:
10.jpg

其实拦截器Interceptors是struts2的最核心的内容,拦截器支撑起了struts2整个的运转流程。
要想理解拦截器,首先要理解过滤器。两个差不太多。

拦截器的作用:拦截用户的请求,对请求进行一些预处理,当请求完毕之后,又可以对请求进行后续的处理,对相应进行后续的处理。作用和过滤器很类似。

创建一个拦截器要是吸纳Interceptor接口。实现里面的三个方法:init()、intercept()、destroy()
Init():初始化方法;
Intercept():拦截逻辑处理方法
destroy():释放资源。
这三个方法和过滤器里面的方法很类似,作用也很类似。

在拦截器里面处理业务逻辑的是Intercept()方法,处理完之后还需要往后走,调用的是ActionInvocation类里面的invoke()方法,这个方法就和过滤器里面的change.doFilter()方法,就是让后续的被执行的action接着去执行。同时也可以配置多个拦截器,如果有多个拦截器的话invoke()方法就会调用下一个拦截器。反正就是让程序继续往下走。

申明拦截器:在struts.xml里面申明interceptor元素。

在tomcat服务器一起来的时候拦截器就被加载了,已经调用了拦截器的init()方法。

拦截器执行流程:
1、先执行inteceptor的intercept()方法;
2、在intercept()里面执行ActionInvocation.invoke()方法,继续往下走,执行action里面的execute()方法,如果执行成功了返回success;
3、execute()方法返回成功success回到inteceptor的intercept()方法,把这个结果返回到action配置的result里面去匹配,回到结果页面。

注意:在默认情况下如果我们在某个action的配置里面没有申明任何拦截器,那么struts2会自动为我们配置一个默认的拦截器defaultStack,而如果我们自己定义了拦截器,并且为某个action配置上了,那么struts2就不会再为这个action配置默认的拦截器,那个默认的拦截器就不会起作用了,只执行我们自定义的拦截器。而这种情况下我们除了使用自定义的拦截器外还必须使用struts2为我们提供的那个默认的拦截器defaultStack(要不然结果参数无法带回到页面上)。所以我们在申明了自定义的拦截器的同时,还要加上struts2为我们提供的默认的拦截器defaultStack,而且配置的时候必须把我们自定义的拦截器配置到上面,最后跟上struts2为我们默认提供的拦截器defaultStack。

实现拦截器的三个步骤:
1、定义一个类,让这个类实现Interceptor这个接口。
2、在struts.xml里面申明这个拦截器。申明不代表使用。
3、在action的配置里面引用拦截器,这才是真正的使用。

具体为interceptor配置参数的示例在拦截器的实例代码里面有标注。

但是如果我们通过事先Interceptor接口来完成拦截器类,那么我们必须得实现这个接口里面的三个方法init()、intercept()、destroy(),其中init()和destroy()方法我们基本上用不到,那么怎么办呢,struts2为我们考虑到了这点,struts2为我们又提供了一个AbstractInterceptor抽象类,这个类实现了Interceptor接口。我们只要在类里面继承这个类就能完成拦截器,而这个类里面的init()和destroy()方法它都给空实现了,intercept()方法定义为抽象方法让我们自己去实现,我们的目的达到了。

拦截器的配置顺序和请求执行的流程是这样的:
首先请求会经过在这个action里面配置的拦截器,拦截器执行顺序是按照拦截器的配置顺序执行,请求先经过第一个拦截器,执行完之后这个拦截器将请求交给第二个拦截器,最后经过struts2提供的默认拦截器,所有拦截器执行完之后请求才会来到action里面去执行execute()方法。Execute()方法执行完之后响应又会按照相反的顺序回到拦截器栈里面去,响应先经过struts2提供的默认的拦截器,然后按照想法顺序一个个经过自定义的拦截器,最后回到成功页面。

下面是过滤器的工作流程,拦截器的工作流程和这个基本相同:
77.jpg
接下来遇到的问题是,如果我们在某个action里面配置了两个拦截器,那么这个action里面的所有方法都会被这些拦截器拦截,但有的时候我们希望我们的action里面的某些方法不被拦截器拦截。所以我们需要通过一些手段让拦截器去拦截我们想让它拦截的方法。前者称为针对类的拦截器,后者称为针对方法的拦截器。

对于针对方法的拦截器struts2又为我们提供了一个抽象类MethodFilterInterceptor,这个抽象类继承了AbstractInterceptor父类,如果我们想要编写针对方法的拦截器的话,继承MethodFilterInterceptor抽象类即可。我们的子类去重写此抽象类里面的doIntercept()方法去实现自己的逻辑。配置需要进行拦截和不拦截方法的配置方式见实例里面。

另外:也可以自定义拦截器栈interceptor-stack,一个拦截器栈里面可以包含多个拦截器,当引用的时候应用这一个拦截器栈就相当于应用了它所包含的所有拦截器。

默认的拦截器栈default-interceptor-ref需要配置在struts.xml里面interceptors下面,执行的时候即使不显示的去应用这些拦截器,它们也会自动执行(默认拦截器栈都是自动执行,不需要引用)

Strtus.xml配置文件里面有一种全局结果global-results,指的是项目里的每一个action都可以使用的结果,这就叫做全局结果。在配置的时候global-results下面的result节点里面有一个type属性,这个属性可选的有两个值,dispatcher和redirect,其中dispatcher表示请求转发的方式,redirect表示重定向的方式。

拦截器的使用场合:权限验证


对于请求转发用户提交完表单之后只要一刷新浏览器表单都会重新提交一次;而对于重定向,用户提交完表单之后再刷新浏览器表单就不会重复提交,因为重定向已经定向到结果页面了,刷新也是刷新结果页面。因此对于开发来说,防止表单重复提交有两种方式:1、使用重定向;2、使用token(令牌机制),

重点见附件实例:Struts2Interceptor.zip
  • 大小: 34.6 KB
  • 大小: 56.1 KB
分享到:
评论

相关推荐

    Struts2.0拦截器总结

    主要总结了struts2.0中的拦截器,对于初学者有一定的帮助,里面也有部分代码演示

    Struts2知识点总结

    Struts2知识点总结,包括文件上传,文件下载,防止表单重复提交,Struts2标签,Struts2拦截器

    Struts 拦截器全解

    Struts 拦截器是我在面试的时候经常碰到的,但在项目当中我们很少去用,所以为了解决这些总是,总结了些,仅供学习

    Struts2框架学习总结【自用】【原创】【详细】

    个人struts2框架学习后的梳理和总结,内容丰富,从配置文件到action类、result、ognl、类型转换器、国际化、拦截器、表单验证等等内容,还推荐了很多博客链接,有了它自学Struts2框架毫无压力!

    struts2总结

    主要总结struts2的一些基本知识点,包括struts2的国际化,拦截器的配置,strtus2 的零配置,struts2实现数据校验

    struts2 学习重点笔记

    这是学习struts2时记得重点笔记,包括了一些原理,ognl语句的编写,以及如何设置拦截器等等一些基本知识,起到复习和巩固的作用

    西安领航核心项目Struts2重点、难点总结

    对Struts2框架中的相关知识还有困惑的同学有福了,此次上传的是西安领航何足道老师的核心项目Struts2部分的重点难点的归纳总结,他对Struts2理解非常深刻,讲的非常的详细易懂,堪称经典。主要包括的知识有Action的...

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

    1.概述strust2中的拦截器 28 2.自定义拦截器 28 方式一,实现Interceptor接口。 28 方式二、继承AbstractInterceptor抽象类 29 方式三、继承MethodFilterInteceptor类 30 3.使用来MethodFilterInterceptor灵活拦截 ...

    对Struts2内建拦截器的知识总结以及将Struts的Jar包上传下

    NULL 博文链接:https://handonghandong.iteye.com/blog/453603

    struts2的总结,适合初学者

    1Mvc与servlet 1.1Servlet的优点 1、是mvc的基础,其他的框架比如struts1,struts2,...4、struts2的拦截器为mvc框架注入了全新的概念。 4Struts2入门 4.1新建一个工程为struts2 4.2修改工程的编码为utf-8 4.3导入

    struts2 总结入门学习文档 教你如何搭建一个struts2环境

    struts2 总结入门学习文档 教你如何白手起家搭建Struts2开发环境、编写第一个struts2应用helloworld、属性介绍、接口、拦截器介绍、struts2标签等。93页

    整合struts2和spring源代码(可以直接在tomcat中运行)

    可以直接运行,并对整合spring和struts2步骤及需要注意的事项进行类总结 整合spring和struts2总结 1.将struts2和spring中的库文件复制...— 如果没有使用Spring ObjectFactory,提供了2个拦截器来自动装配action。

    Struts2总结-2

    总结了ognl , 值栈,向值栈中放数据获取数据,拦截器,国际化资源的使用,校验器

    review.struts.zip

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

    struts基础总结

    该文当内是本人该干刚学习的struts2的一个总结,希望对大家有所帮助!

    struts2一些知识点总结

    关于struts2的入门知识点,以及拦截器方面的知识

    struts2入门实例1

    struts2 最新的入门实例 我自己总结的 呵呵,欢迎提出宝贵的意见 1.Struts2_01_login 对应登录。。 login.jsp---------------------------------------html标签的登陆页面 login_struts2.jsp--------------...

    Struts2 学习笔记

    01 Struts2-Action 5 一、 Struts作用: 5 二、 搭建Struts2的运行环境: 5 三、 Namespace 6 四、 标签 6 五、 Action 6 六、 路径问题的说明 8 ...09 自定义拦截器 38 10 类型转换 38 Struts2总结 39

    Struts2+Web常使用的功能经验笔记第1季

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

Global site tag (gtag.js) - Google Analytics