1、Struts2中使用拦截器来扩展Action的功能,往往是用来处理Action之间通用的事务,比如:记录日志、权限检查、控制事务。并且这种方式是可配置的,灵活很高,这种方式大大的提升了Struts2框架的扩展性。是AOP思想的一种体现。
2、Struts2中预置了大量的拦截器,我们可以直接使用,这些拦截器定义在struts-default.xml中,每一个拦截器都对应一个类,这些类都实现了统一的接口Interceptor。
3、拦截器的使用步骤
a.创建拦截器组件(类),要实现Interceptor接口
b.在struts.xml中,package下注册该拦截器,实际上是对拦截器类的注册
c.在struts.xml中,action的配置下,增加对拦截器的引用,实际上是引用注册好的拦截器
如下面代码所示,默认struts.xml中我们需要extends="struts-default"。因为struts-default是定义在struts2-core.jar中的struts-default.xml中的一个package的name,该package中定义了struts2中所需要的各种Result type 和 interceptor,而默认已经引用的是拦截器栈 defaultStack <default-interceptor-ref name="defaultStack"/>。defaultStack会拦截所有的action不仅仅是乱码输入,最重要一个是获得页面传参,所有extends="struts-default" 是非常必要的。
<package name="valueStack" extends="struts-default" namespace="/"> <action name="hello" class="com.tarena.action.HelloAction"> <result name="SUCCESS">/demo.jsp</result> </action> </package>
但是struts2提供的拦截器并不满足我们所有的需求,我们需要自定义拦截器或者拦截器栈。
案例如下:
1) 新建类FirstInterceptor.java,implements Interceptor接口。要重写init(),destory(),intercept()方法。或者extends AbstractInterceptor,这个不太常用。
public class FirstInterceptor implements Interceptor { /* * 该方法与init()方法对应,在拦截器销毁之前,系统将回调该拦截器的destroy方法,该方法用于释放init方法中打开的资源。 */ public void destroy() { } /* * 在该拦截器被初始化之后,在该拦截器执行拦截之前,系统将回调该方法,init()方法主要是用于打开一些资源,例如数据库资源。该方法只执行一次。 */ public void init() { } /* * 拦截器的拦截方法,用于拦截Action */ public String intercept(ActionInvocation ai) throws Exception { // 模拟在Action业务方法前,追加业务 System.out.println("FirstInterceptor拦截前..."); /* * invoke()用于调用引用该拦截器的业务方法, 如果当前拦截方法中没有调用invoke(), * 那么就不会调用到Action的业务方法,从而 实现了对Action的拦截. */ ai.invoke(); // 模拟在Action业务方法后,追加业务 System.out.println("FirstInterceptor拦截后..."); /* * 如果拦截方法中调用了invoke(),那么返回值 将以被调用的Action返回值为准, 如果没调用,拦截方法中的返回值才生效 */ return "error"; } }
类SecondInterceptor.java
public class SecondInterceptor implements Interceptor { public void destroy() { } public void init() { } public String intercept(ActionInvocation ai) throws Exception { System.out.println("SecondInterceptor拦截前..."); ai.invoke(); System.out.println("SecondInterceptor拦截后..."); return "error"; } }
2) 在struts.xml 的 package下注册拦截器
<!-- 注册拦截器 --> <interceptors> <interceptor name="first" class="com.lydia.interceptor.FirstInterceptor" /> <interceptor name="second" class="com.lydia.interceptor.SecondInterceptor" /> <interceptor-stack name="mystacks"> <interceptor-ref name="first"/> <interceptor-ref name="second"/> </interceptor-stack> </interceptors>
3)在struts.xml中,action的配置下,引用对拦截器
<!-- 引用拦截器 --> <interceptor-ref name="first"/> <interceptor-ref name="second"/> <!-- 引用拦截器栈 (二选一即可)--> <!--<interceptor-ref name="mystacks"/>--> <interceptor-ref name="defaultStack"/>
4) HelloAction.java按照原定业务操作,它会默认调用拦截器的。
public class ToUpdateCustomerAction { //input,由于是模拟的代码,不给输入了 //output private Customer customer; private List<City> cities; public ToUpdateCustomerAction() { System.out.println("实例化Action..."); } public String execute() { System.out.println("Action业务方法..."); CustomerDAO dao = new CustomerDAO(); customer = dao.findById(); cities = dao.findAllCities(); return "success"; } //get/set方法省略 }
5) 执行顺序和结果
实例化Action...
FirstInterceptor拦截前...
SecondInterceptor拦截前...
Action业务方法...
SecondInterceptor拦截后...
FirstInterceptor拦截后...
相关推荐
2. **拦截器链**:在Struts2中,多个拦截器可以形成一个拦截器链,每个拦截器按照定义的顺序依次执行。如果所有拦截器都允许Action执行,那么Action的结果将被传递到下一个拦截器,直到整个链执行完毕。 ### 二、...
在Struts2中,拦截器(Interceptors)扮演着核心角色,增强了框架的功能和灵活性。这篇文章将深入探讨Struts2拦截器的概念、工作原理以及如何在实际应用中使用它们。 **一、什么是Struts2拦截器** 拦截器是基于AOP...
标题“struts2拦截器”指的是Struts2框架中的拦截器机制,这是一个关键的组件,可以让我们在不修改实际业务代码的情况下,实现对请求处理流程的扩展和定制。 描述中提到的“基于struts2的拦截器测试,实现了页面的...
Struts2拦截器(Interceptor) Struts2拦截器(Interceptor)
拦截器是Struts2框架的核心特性之一,它们扮演着处理请求、增强功能和实现业务逻辑的角色。在Struts2中,拦截器就像过滤器一样工作,通过链式调用在动作执行前后进行预处理和后处理。 首先,我们来理解一下拦截器的...
### Struts2拦截器详解 #### 一、Struts2拦截器概述 Struts2框架作为Java Web开发中的一种流行框架,其核心组件之一便是**拦截器**。拦截器不仅在Struts2中扮演着重要角色,更是整个框架灵活性与扩展性的基石。...
在Struts2中,拦截器(Interceptor)扮演着核心角色,它们允许开发者在Action执行前后插入自定义的逻辑,如日志、权限检查、事务管理等。现在我们将深入探讨Struts2的拦截器机制及其实例应用。 ### 一、Struts2拦截...
在这个“Struts2拦截器实现权限控制demo”中,我们将深入探讨如何利用拦截器来实现细粒度的用户权限管理。 首先,我们需要了解Struts2中的拦截器工作原理。拦截器是基于Java的动态代理模式实现的,它们按照配置的...
### Struts2拦截器的使用方法 #### 一、Struts2拦截器概述 Struts2框架中的拦截器(Interceptor)是一种重要的机制,用于在Action执行前后进行一系列处理,比如参数验证、数据预处理等。它能够帮助开发者更加灵活...
当请求到达控制器时,Struts2会依次调用这个栈中的拦截器,每个拦截器都有机会处理请求,然后决定是否将请求传递给下一个拦截器或直接返回响应。 创建一个简单的Struts2拦截器,你需要遵循以下步骤: 1. 创建拦截...
Struts2拦截器.ppt Struts2拦截器.ppt Struts2拦截器.ppt
拦截器是Struts2框架的核心组成部分,它们在请求处理流程中起到了关键的作用。在本文中,我们将深入探讨Struts2拦截器的工作原理。 ### 一、拦截器概念 拦截器是基于Java的动态代理机制实现的,它允许我们在Action...
拦截器是Struts2框架的一个重要组成部分,能够帮助开发者实现一些在请求处理前后执行的通用逻辑,如日志记录、权限验证、数据校验等。在本场景中,我们将探讨如何使用Struts2拦截器来实现对不文明字迹或者敏感词汇的...
拦截器是Struts2框架的核心组件之一,它允许开发者在动作执行前后插入自定义逻辑,实现如权限验证、日志记录、性能优化等多种功能。在"Struts2 拦截器注解"这个主题中,我们将深入探讨如何利用注解来简化拦截器的...
这篇博客“Struts2 拦截器的执行顺序(二十九)”可能探讨了Struts2拦截器链的工作原理和它们的执行顺序,这对于理解Struts2的内部机制至关重要。 首先,让我们深入理解Struts2的拦截器。拦截器是在Action调用前后...
这篇博客“struts2 拦截器实现登录控制”显然会探讨如何利用拦截器来实现用户登录验证,从而保护应用程序的受保护资源。 首先,我们了解下Struts2拦截器的工作原理。拦截器是基于AOP(面向切面编程)的概念,它位于...
### Struts2 拦截器与验证框架详解 #### 一、Struts2概述 Struts2是一个基于Java的企业级Web应用开发框架,它继承了Struts1的优点,并在此基础上进行了很多改进,使得开发更加灵活高效。Struts2的核心是拦截器...
在Struts2中,拦截器扮演着至关重要的角色,它们是实现MVC(Model-View-Controller)架构的关键组件之一。拦截器允许开发者在动作执行前后插入自定义逻辑,比如日志记录、权限检查、数据验证等,而无需修改核心业务...