Struts2自定义拦截器

本文记录Java学习过程中遇到的Struts2自定义拦截器~

在程序开发过程中,如果需要开发自己的拦截器类,就需要直接或间接的实现com.openssymphony.xwork2.interceptor.Interceptor接口。

示例代码(Interceptor接口):

public interface Interceptor extends Serializable {
	void init();
	void destroy();
	String intercept(ActionInvocation invocation) throws Exception;
}

该接口提供了三个方法,具体介绍如下:

  • void init():该方法在拦截器被创建后会立即被调用,它在拦截器的生命周期内只被调用一次,可以在该方法中对相关资源进行必要的初始化;
  • void destroy():该方法与init方法相反,在拦截器实例被销毁之前,将调用该方法来释放和拦截器相关的资源。它在拦截器的生命周期内也只被调用一次。
  • String intercept(ActionInvocation invocation) throws Exception:该方法是拦截器的核心方法,用来添加真正执行拦截工作代码,实现具体的拦截操作。它返回一个字符串作为逻辑视图,系统根据返回的字符串跳转到对应的视图资源。每拦截一个动作请求,该方法就会被调用一次。该方法的ActionInvocation参数包含了被拦截的Action的引用,可以通过该参数的invoke()方法,将控制权转给下一个拦截器或者转给Action的execute()方法。

在实际的开发中,除了实现Interceptor接口可以自定义拦截器外,更常用的一种方式是继承抽象拦截器类AbstractIntercepter。该类实现了Interceptor接口,并且提供了init()方法和destroy()方法的空实现。使用时,可以直接继承该抽象类,而不用实现那些不必要的方法。

示例代码(AbstractIntercepter抽象类):

public abstract class AbstractIntercepter implements Interceptor {
	public void init() {}
	public void destroy() {}
	String intercept(ActionInvocation invocation) throws Exception;
}

只有当自定义的拦截器需要打开系统资源时,才需要覆盖AbstractIntercepter类的init()方法和destroy()方法。

标签: none