`

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拦截器及其用法详细说明

    总结,Struts2拦截器是其核心机制之一,它允许开发者以模块化的方式添加额外的功能,提高代码的可复用性和可维护性。通过自定义拦截器和合理配置,我们可以实现诸如日志记录、事务管理、权限验证等多种业务需求,...

    struts2拦截器应用小例子

    总结来说,Struts2的拦截器机制提供了强大的功能,允许开发者以声明式的方式控制请求的处理流程。通过这个小例子,你可以深入理解拦截器的工作原理,并学会如何将其应用于实际项目,提升代码的可维护性和复用性。

    Struts2拦截器源程序

    总结来说,Struts2拦截器是框架的核心部分,它们提供了一种灵活的方式,以实现各种功能,如日志记录、性能监控、权限控制等,同时保持代码的整洁和模块化。通过对`98struts201`文件的深入研究,我们可以更好地掌握...

    Struts2拦截器原理分析

    总结,Struts2拦截器是其核心特性之一,它增强了框架的功能性和灵活性,使得开发者能够更轻松地处理诸如数据校验、事务控制等常见问题。理解和掌握拦截器的原理和用法,对于提升Java Web开发的效率和代码质量具有...

    struts2拦截器实现拦截不文明字迹

    Struts2是一个强大的MVC(模型...总结起来,通过使用Struts2拦截器,我们可以高效地实现对不文明字迹的拦截,提高应用的安全性和用户体验。同时,结合合理的配置和自定义验证,我们可以构建出健壮且灵活的Web应用程序。

    Struts2.0拦截器总结

    - **扩展性**:Struts2提供了一套默认的拦截器集合,包括参数拦截、类型转换、文件上传等功能,可以根据需求选择合适的拦截器。 - **自定义**:除了使用默认提供的拦截器外,还可以根据项目需求自定义拦截器来满足更...

    利用struts2拦截器做的简单登录

    总结来说,Struts2拦截器是实现登录验证和其他预处理逻辑的强大工具。通过自定义拦截器,我们可以灵活地控制请求流程,确保只有经过验证的用户才能访问受保护的资源。结合实际的代码示例和配置,我们可以更好地理解...

    Struts2 拦截器 和 Java 中的动态代理

    总结来说,Struts2拦截器是实现业务逻辑增强和控制流程的重要组件,它基于Java的动态代理机制。通过在Action执行前后插入自定义代码,拦截器使得我们可以方便地进行如日志记录、权限验证等操作,而无需直接修改...

    struts2 拦截器的使用(继承抽象拦截器)

    总结来说,通过继承Struts2的`AbstractInterceptor`,我们可以轻松地创建自己的拦截器,实现特定的业务需求。这增强了框架的灵活性,使得我们能够在不改变Action代码的情况下添加额外的功能。在实际项目中,利用拦截...

    struts2拦截器时序图

    总结来说,Struts2拦截器及其时序图展示了拦截器在Action处理过程中的工作原理和顺序。通过拦截器链,开发者可以灵活地对Action的调用进行增强和控制,实现诸如数据校验、日志记录等功能,这些功能是构建企业级Java ...

    Struts2的拦截器的小例子程序

    ### Struts2拦截器原理与实战案例解析 #### 一、Struts2拦截器概述 Struts2框架作为Java Web开发中的重要工具之一,其核心优势在于强大的MVC架构支持和丰富的扩展性。其中,拦截器(Interceptor)是Struts2框架的...

    struts2.0拦截器、crud例子与用法

    总结来说,Struts2.0的拦截器提供了一种灵活的方式来扩展和控制应用程序的行为,而CRUD操作则通过Action类实现。理解这些核心概念对于有效地利用Struts2开发Web应用至关重要。通过熟练掌握这些知识,开发者可以更...

    Struts2 拦截器 Interceptor

    2. **拦截器栈**:多个拦截器的集合称为拦截器栈,Struts2默认提供了几个内置的拦截器栈,如`defaultStack`、`jsonStack`等,也可以自定义拦截器栈。 3. **拦截器配置**:拦截器可以通过Struts2的配置文件`struts....

    struts拦截器jar 包

    总结来说,"struts拦截器jar包"是指专门为Struts 1.x框架提供拦截器功能的第三方库,`saif-0.1.jar`和`saif-spring.jar`可能是用于实现特定拦截逻辑或整合Spring框架的扩展库。了解并正确使用这些jar包能够有效地...

    struts2实现拦截器、

    总结起来,Struts2的拦截器机制是其强大功能之一,它使得开发者能够轻松地在Action执行流程中插入自定义逻辑。通过创建和配置拦截器,我们可以实现诸如权限验证、日志记录等功能,提升应用的安全性和可维护性。在...

    struts2 Interceptor拦截器

    ### Struts2 Interceptor 拦截器详解 #### 一、概述 在现代Web开发中,特别是基于Java的Web应用程序开发中,Struts2框架因其简洁性和强大的扩展能力而备受青睐。Struts2框架的核心设计理念之一是MVC(Model-View-...

    struts2拦截器

    ### Struts2拦截器详解 #### 一、拦截器的概念与意义 拦截器(Interceptor)在Struts2框架中扮演着至关重要的角色。它的工作原理类似于过滤器(Filter),能够拦截用户请求,并对其进行预处理或者后处理。拦截器...

    struts2拦截器的使用

    ### Struts2拦截器的使用 #### 一、概述 Struts2框架是基于MVC设计模式的一个开源框架,它提供了强大的功能来帮助开发者构建Web应用程序。在Struts2中,拦截器是一种非常重要的机制,它可以在Action执行前后进行...

    Struts 2 过滤器和拦截器的区别

    ### Struts 2 过滤器与拦截器的深入解析 #### 一、概述 在Struts 2框架中,过滤器(Filter)和拦截器(Interceptor)都是用于处理请求的关键组件,但它们之间存在本质的区别。正确理解这些差异有助于开发者更高效地...

Global site tag (gtag.js) - Google Analytics