虽然Struts2框架提供了许多拦截器,这些内建的拦截器实现了Struts2的大部分功能,因此,大部分Web应用的通用功能,都可以通过直接使用这些拦截器来完成。但还有一些系统逻辑相关的通用功能,则可以通过自定义拦截器来实现。值得称道的是,Struts2的拦截器系统是如此的简单,易用。
实现拦截器类
如果用户要开发自己的拦截器类,应该实现com.opensymphony.xwork2.interceptor.Interceptor接口,该接口的类定义代码如下:
package com.opensymphony.xwork2.interceptor;
import com.opensymphony.xwork2.ActionInvocation;
import java.io.Serializable;
public abstract interface Interceptor implements Serializable
{
//销毁该拦截器之前的回调方法
public abstract void destroy();
//初始化该拦截器的回调方法
public abstract void init();
//拦截器实现拦截的逻辑方法
public abstract String intercept(ActionInvocation paramActionInvocation)
throws Exception;
}
通过上面的接口可以看出,该接口里包含了三个方法:
*init(): 在该拦截器被初始化之后,在该拦截器执行拦截之前,系统将回调该方法。对于每个拦截器而言,该init()方法只执行一次。因此,该方法的方法体主要用于打开一些一次性资源,例如数据库资源等。
*destroy(): 该方法与init()方法对应。在拦截器实例被销毁之前,系统将回调该拦截器的destroty方法,该方法用于销毁在init()方法里打开的资源。
*interceptor(ActionInvocation invocation): 该方法是用户需要实现的拦截动作。就像Action的execute方法一样,intercept方法会返回一个字符串作为逻辑视图。如果该方法直接返回了一个字符串,系统将会跳转到该逻辑视图对应的实际视图资源,不会调用被拦截的Action。该方法的ActionInvocation参数包含了被拦截的Action的引用,可以通过调用该参数的invoke方法,将控制权转给下一个拦截器,或者转给Action的execute方法。
除此之外,Struts2还提供了一个AbstractInterceptor类,该类提供了一个init和destory方法的空实现,如果我们实现的拦截器不需要申请资源,则可以无需实现这两个方法。可见,继承AbstractInterceptor类来实现自定义拦截器会更加简单。
AbstractInterceptor.java
package com.opensymphony.xwork2.interceptor;
import com.opensymphony.xwork2.ActionInvocation;
public abstract class AbstractInterceptor
implements Interceptor
{
public void init()
{
}
public void destroy()
{
}
public abstract String intercept(ActionInvocation paramActionInvocation)
throws Exception;
}
下面实现了一个简单的拦截器:
public class SimpleInterceptor extends AbstractInterceptor {
// 简单拦截器的名字
private String name;
// 为该简单拦截器设置名字的setter方法
public void setName(String name) {
this.name = name;
}
// 拦截Action方法的intercept方法
public String intercept(ActionInvocation invocation) throws Exception {
// 取得被拦截的Action实例
LoginAction action = (LoginAction) invocation.getAction();
// 打印
System.out.println(name + "拦截器的动作----------- 开始执行登录Action的时间为:" + new Date());
// 取得开始执行Action的时间
long start = System.currentTimeMillis();
// 执行该拦截器的后一个拦截器,或者直接指定Action的execute方法
String result = invocation.invoke();
System.out.println(name + " 拦截器的动作----------- 执行完登录Action的时间为: " + new Date());
// 取得执行完的事件
long end = System.currentTimeMillis();
System.out.println(name + "拦截器的动作----------- 执行完该Action的时间为:" + (end - start) + "毫秒");
return result;
}
}
上面的拦截器仅仅在被拦截方法之前,打印出开始执行Action的时间,并记录开始执行Action的时刻;执行被拦截Action的execute方法之后,再次打印出当前时间,并输出执行Action的时长。
当我们实现intercept(ActionInvocation invocation)方法之时,可以获得ActionInvocation参数,这个参数又可以获得被拦截的Action实例,一旦取得了Action实例,几乎获得了全部的控制权;可以实现将HTTP请求中的参数解析出来,设置成Action的属性(这是系统params拦截器干的事情):也可以直接将HTTP请求中的HttpServletRequest实例和HttpServletResponse实例传给Action(这是servlet-config拦截器干的事情)……当然,也可实现应用相关的逻辑。
分享到:
相关推荐
在这个"struts2的自定义拦截器例子"中,我们将深入探讨如何创建和使用自定义拦截器。 首先,拦截器的本质是Java的面向切面编程(AOP)思想在Struts2中的体现。它们允许开发者在动作执行前后插入自定义的逻辑,例如...
本项目“Struts2_自定义拦截器_用户权限验证”将深入探讨如何在Eclipse开发环境中,利用Struts2框架自定义拦截器进行用户权限的验证,并处理各个Action之间的跳转。 首先,我们来看自定义拦截器的创建。在Struts2中...
在添加自定义拦截器时,可以将其插入到默认拦截器栈中,也可以创建自定义的拦截器栈。 ### 五、测试与优化 完成上述步骤后,你可以通过访问受保护的URL来测试拦截器的效果。如果用户未登录,系统应重定向到登录页面...
本文将深入探讨Struts2的内建自定义拦截器及其配置。 首先,让我们理解什么是拦截器。拦截器是基于AOP(面向切面编程)思想的,它们在Action调用前后执行,形成一个拦截器链。每个拦截器都可以执行特定的任务,并且...
Struts2_3500_my_interceptor这个文件可能包含了一个示例项目的源代码,你可以通过学习和分析其中的代码,更深入地理解如何在Struts2中创建和使用自定义拦截器。通过实际操作,你会发现自定义拦截器是Struts2框架中...
这篇博客文章可能是关于如何在Struts2中创建和使用自定义拦截器的教程。 在Struts2中,拦截器是基于责任链模式实现的,它们按照指定的顺序执行,对请求进行处理。拦截器可以用来进行权限检查、日志记录、事务管理等...
Struts2自定义拦截器的配置是Struts2框架中一个非常重要的功能,它允许开发者在Action执行前后插入自定义的逻辑,以实现如权限验证、日志记录、性能监控等多种需求。以下是对标题和描述中涉及的知识点的详细说明: ...
本示例将聚焦于如何在Struts2中实现一个自定义拦截器。 首先,我们需要了解拦截器在Struts2中的作用。拦截器是AOP(面向切面编程)的一个核心概念,它允许开发者在动作执行前后插入额外的逻辑,如日志记录、权限...
2. **配置拦截器**:在Struts2的配置文件(通常为struts.xml)中注册自定义拦截器,并指定其在拦截器栈中的位置。例如: ```xml <struts> <package name="default" namespace="/" extends="struts-default"> ...
在深入探讨自定义拦截器之前,我们先理解一下Struts2拦截器的基本概念。 拦截器(Interceptor)是基于Java的动态代理机制实现的,它可以拦截用户的请求,对请求进行预处理,并且在Action执行后进行后处理。通过在...
在Struts2中,自定义拦截器是实现业务逻辑控制、数据验证、权限管理等功能的重要手段。下面将详细探讨如何在Struts2中实现自定义拦截器来完成权限拦截。 首先,我们需要了解Struts2拦截器的工作原理。拦截器是在...
接下来,我们需要在Struts2的配置文件(通常为struts.xml)中声明并配置这个自定义拦截器。这样,当Action被调用时,Struts2会自动应用这个拦截器。 ```xml <struts> ...
本篇将深入讲解如何在Struts2中自定义拦截器,并通过提供的源代码进行分析。 拦截器是Struts2框架的核心组件之一,它允许我们在请求到达Action之前或离开Action之后执行一些额外的操作,如日志记录、权限验证、性能...
在给定的标签“源码”和“工具”中,我们可以理解到,这个压缩包可能包含了示例代码或者一些工具,如IDE插件,用于帮助开发者更好地理解和使用Struts2自定义拦截器。文件名`strutsdemo`可能是一个简单的Struts2演示...
配置Struts2框架以使用自定义拦截器是关键步骤。在`struts2.xml`配置文件中,你需要在合适的`<package>`标签下定义拦截器。例如: ```xml <package name="customPackage" namespace="/" extends="struts-default"> ...
在Struts2中,拦截器(Interceptor)扮演着至关重要的角色,它允许开发者在动作执行前后插入自定义逻辑,如日志记录、权限验证等。在本案例中,我们将深入探讨如何使用Struts2拦截器实现登录权限验证,同时结合...
本篇文章将深入探讨如何实现自定义拦截器及其在Struts2中的详细配置。 首先,我们来了解自定义拦截器的基本步骤: 1. **创建拦截器类**:自定义拦截器需要继承Struts2提供的`Interceptor`接口或实现`intercept()`...