`
ldzyz007
  • 浏览: 716872 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

struts2自己定义拦截器

阅读更多
Interceptor(拦截器),顾名思义,就是在某个事件发生之前进行拦截,并插入某些处理
过程。Servlet 2.3规范中引入的Filter 算是拦截器的一个典型实现,它在Servlet执行之前被触发,对输入参数进行处理之后,再将工作流程传递给对应的Servlet。
而今年来兴起的AOP(Aspect Oriented Programming),更是将Interceptor 的作用提升到
前所未有的高度。
Xwork 的Interceptor 概念与之类似。即通过拦截Action 的调用过程,为其追加预处理
和后处理过程。

自定义一个拦截器需要三步:

1.自定义一个实现Interceptor接口(或者继承自AbstractInterceptor)的类。 Struts2提供MethodFilterInterceptor类,该类是AbstractInerceptor的子类,可以实现对Action方法的拦截.
  1.1 Interceptor接口声明了三个方法:
      public interface Interceptor extends Serializable {
           void destroy();
           void init();
           String intercept(ActionInvocation invocation) throws Exception;
      }
      Init方法在拦截器类被创建之后,在对Action镜像拦截之前调用,相当于一个post-  constructor方法,使用这个方法可以给拦截器类做必要的初始话操作。
      Destroy方法在拦截器被垃圾回收之前调用,用来回收init方法初始化的资源。
      Intercept是拦截器的主要拦截方法,如果需要调用后续的Action或者拦截器,只需要在该方法中调用 invocation.invoke()方法即可,在该方法调用的前后可以插入Action调用前后拦截器需要做的方法。如果不需要调用后续的方法,则返回一个String类型的对象即可,例如Action.SUCCESS。
  1.2 AbstractInterceptor提供了一个简单的Interceptor的实现,这个实现为:
      public abstract class AbstractInterceptor implements Interceptor {
          public void init() {}
          public void destroy() {}
          public abstract String intercept(ActionInvocation invocation) throws Exception;
      }
      在不需要编写init和destroy方法的时候,只需要从AbstractInterceptor继承而来,实现intercept方法即可。
  1.3 MethodFilterInterceptor中有两个方法  
      setExcludeMethods:排除需要过滤的方法     
      setIncludeMethods:设置需要过滤的方法     
      如果一个方法同时在excludeMethods和includeMethods中出现,则会被拦截

2.在strutx.xml中注册上一步中定义的拦截器。
3.在需要使用的Action中引用上述定义的拦截器,为了方便也可将拦截器定义为默认的拦截器,这样在不加特殊声明的情况下所有的Action都被这个拦截器拦截。
4.<default-interceptor-ref name="myStack"/>(这句是设置所有Action自动调用的拦截器堆栈)
5.Interceptor拦截类型
  5.1 before拦截,是指在拦截器中定义的代码,它们存在于invocation.invoke()代码执行之前。这些代码,将依照拦截器定义的顺序,顺序执行。
  5.2 after拦截,是指在拦截器中定义的代码,它们存在于invocation.invoke()代码执行之后。这些代码,将一招拦截器定义的顺序,逆序执行。
  5.3 PreResultListener拦截: 有的时候,before拦截和after拦截对我们来说是不够的,因为我们需要在Action执行完之后,但是还没有回到视图层之前,做一些事情。Struts2同样支持这样的拦截,这种拦截方式,是通过在拦截器中注册一个PreResultListener的接口来实现的。

分享到:
评论

相关推荐

    Struts2 配置登陆拦截器

    这可以通过`&lt;interceptors&gt;`标签来完成,定义拦截器栈并指定拦截器的顺序。 ```xml ``` 3. **应用拦截器**:接着,你需要在Action配置中指定要使用的拦截器栈。这样,每次请求到这个Action时,都会先...

    一个Struts2的核心拦截器例子

    通过`&lt;interceptors&gt;`标签定义拦截器栈,然后使用`&lt;interceptor&gt;`子标签创建拦截器实例。 - 使用`&lt;interceptor-ref&gt;`标签引用已定义的拦截器,并通过`name`属性指定。 - 使用`&lt;default-interceptor-ref&gt;`定义默认...

    创建自己struts2拦截器

    通过以上步骤,你可以创建并使用自己的Struts2拦截器。这使得我们可以灵活地扩展Struts2的功能,实现诸如登录检查、权限控制、事务管理等多种业务需求。在实际项目中,自定义拦截器是提升代码复用性和可维护性的重要...

    Struts2学习案例(拦截器)

    1. **Struts2配置**:理解`struts.xml`文件的配置,包括Action的配置、拦截器栈的定义等。 2. **拦截器的编写和使用**:创建自定义拦截器类,实现`Interceptor`接口,以及如何在配置文件中引用拦截器。 3. **Action...

    Struts2拦截器及其用法详细说明

    - XML配置:在`struts.xml`文件中,使用`&lt;interceptor&gt;`元素定义拦截器,`&lt;interceptor-stack&gt;`元素组合多个拦截器,`&lt;package&gt;`元素下的`interceptors`属性指定拦截器栈。 ```xml &lt;!-- 可以添加其他内置或...

    struts2 拦截器

    2. **配置拦截器**:在`struts.xml`配置文件中定义拦截器,指定其执行顺序和关联的Action。 3. **注册拦截器**:将自定义拦截器加入到`struts-default`或`struts-plugin`拦截器栈中,或者创建新的拦截器栈并应用到...

    Struts2拦截器源码

    首先,理解拦截器的定义:拦截器是AOP(面向切面编程)的一个概念,在Struts2中,拦截器是基于Java的动态代理机制实现的。它们是一系列实现了`Interceptor`接口的类,可以在Action执行前后插入额外的行为。这些行为...

    Struts2 拦截器

    通过在`struts.xml`或`struts-plugin.xml`配置文件中定义拦截器栈,可以指定拦截器的执行顺序。 以下是一些常见的Struts2内置拦截器及其用途: 1. `params`:负责从请求参数中填充Action属性。 2. `i18n`:处理国际...

    Struts2拦截器源程序

    在`struts.xml`配置文件中,可以通过`&lt;interceptors&gt;`标签定义拦截器栈,并通过`&lt;interceptor&gt;`标签定义单个拦截器。使用`&lt;interceptor-stack&gt;`标签可以组合多个拦截器形成拦截器栈。通过`&lt;package&gt;`标签的`default-...

    详解Struts2拦截器

    在`struts.xml`文件中定义拦截器的基本语法如下: ```xml 拦截器名" class="拦截器实现类"/&gt; ``` 如果需要向拦截器传递参数,可以使用`&lt;param&gt;`标签: ```xml 拦截器名" class="拦截器实现类"&gt; 参数名"&gt;参数值 ...

    运用struts2技术的拦截器实现的页面检测和用户注册

    开发者可以通过配置struts.xml或struts.properties文件来定义拦截器链和其顺序。 1. **创建拦截器** 在Struts2中,我们可以通过实现`com.opensymphony.xwork2.interceptor.Interceptor`接口或者继承`...

    Struts2拦截器实现权限控制demo

    在Struts2的核心配置文件`struts.xml`中,我们可以定义拦截器链,指定哪些拦截器应用于哪些Action。 权限控制是web应用中不可或缺的一部分,它可以防止未经授权的用户访问特定资源。在Struts2中,我们可以通过拦截...

    struts2拦截器应用小例子

    当请求到达控制器时,Struts2会依次调用这个栈中的拦截器,每个拦截器都有机会处理请求,然后决定是否将请求传递给下一个拦截器或直接返回响应。 创建一个简单的Struts2拦截器,你需要遵循以下步骤: 1. 创建拦截...

    struts2类型转换 拦截器 校验的例子

    在struts.xml配置文件中,你可以通过`&lt;interceptors&gt;`标签定义拦截器栈,并通过`&lt;action&gt;`标签中的`interceptor-ref`指定使用哪些拦截器。 然后,我们关注的是**校验(Validation)**。Struts2提供了基于注解和XML...

    struts2 用拦截器 实现用户权限登录

    1. **定义拦截器类**:首先,我们需要创建一个实现了`Interceptor`接口的Java类。例如,我们可以创建一个名为`LoginCheckInterceptor`的类,并重写`intercept`方法。 ```java public class LoginCheckInterceptor ...

    使用struts2拦截器对登陆权限验证

    在Struts2中,拦截器(Interceptor)扮演着至关重要的角色,它允许开发者在动作执行前后插入自定义逻辑,如日志记录、权限验证等。在本案例中,我们将深入探讨如何使用Struts2拦截器实现登录权限验证,同时结合...

    struts2实现拦截器、

    在Struts2中,拦截器是基于Java的动态代理机制实现的,它们按照预定义的顺序形成一个拦截器链。当请求到达Action时,这些拦截器会按照顺序逐个执行其`intercept()`方法,最后调用实际的动作方法。拦截器可以独立于...

    struts2拦截器

    2. **配置拦截器**:在`struts.xml`配置文件中,你需要定义拦截器,并指定其在拦截器栈中的位置。可以使用`&lt;interceptors&gt;`标签定义拦截器栈,`&lt;interceptor&gt;`标签定义单个拦截器,`&lt;interceptor-ref&gt;`标签引用已...

    Struts2简单的拦截器示例

    3. **定义拦截器栈**:你可以将多个拦截器组合成一个拦截器栈,这样它们会按照声明的顺序依次执行。 4. **应用拦截器**:将拦截器栈与特定的Action关联,这样当Action被调用时,拦截器就会按顺序执行。 在提供的...

    Struts2拦截器的实现原理(csdn)————程序.pdf

    开发者可以通过实现这个接口或者继承已有的拦截器基类(如`AbstractInterceptor`)来自定义拦截器。 总的来说,Struts2拦截器提供了一种强大的机制,使得开发者可以轻松地扩展和控制应用程序的行为,而不需要修改...

Global site tag (gtag.js) - Google Analytics