`

struts2中的拦截器(二)

阅读更多

在struts2中的拦截器的基础上进行修改,以实现Interceptor接口的方式创建一个新的拦截器,如下所示:

public class MyInterceptor implements Interceptor {

	@Override
	public void destroy() {
	}

	@Override
	public void init() {
	}

	@Override
	public String intercept(ActionInvocation invocation)
			throws Exception {
		System.out.println("开始拦截");
		invocation.invoke();
		System.out.println("结束拦截");
		return "success";
	}
}

方式二、继承AbstractInterceptor抽象类

代码如下所示:

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

public class MyAbstractInterceptor extends AbstractInterceptor {

	@Override
	public String intercept(ActionInvocation invocation)
			throws Exception {
		System.out.println("Abs开始拦截");
		String result = invocation.invoke();
		System.out.println("Abs结束拦截");
		return result;

	}
}

 AbstractInterceptor的源代码如下所示:

public abstract class AbstractInterceptor
  implements Interceptor
{
  public void init()
  {
  }

  public void destroy()
  {
  }

  public abstract String intercept(ActionInvocation paramActionInvocation)
    throws Exception;
}

 方式三、继承MethodFilterInteceptor类

public class MyMethodFilterInterceptor extends MethodFilterInterceptor {

	@Override
	protected String doIntercept(ActionInvocation invocation)
			throws Exception {
		System.out.println("method开始拦截");
		String result=invocation.invoke();
		System.out.println("method结束拦截");
		return result;
	}
}

 配置文件如下所示:

<package name="myDemo" namespace="/demo" extends="struts-default">
		<interceptors>
			<interceptor name="myInterceptor" class="demo.action.MyInterceptor" />
			<interceptor name="absInterceptor" class="demo.action.MyAbstractInterceptor" />
			<interceptor name="methodInterceptor" class="demo.action.MyMethodFilterInterceptor" />
		</interceptors>
		<action name="login" class="demo.login.action.LoginAction">
			<result name="success">/WEB-INF/jsp/success.jsp</result>
			<interceptor-ref name="myInterceptor"></interceptor-ref>
			<interceptor-ref name="absInterceptor" />
			<interceptor-ref name="methodInterceptor" />
		</action>
	</package>

 或者为

	<package name="myDemo" namespace="/demo" extends="struts-default">
		<interceptors>
			<interceptor name="myInterceptor" class="demo.action.MyInterceptor" />
			<interceptor name="absInterceptor" class="demo.action.MyAbstractInterceptor" />
			<interceptor name="methodInterceptor" class="demo.action.MyMethodFilterInterceptor" />
		</interceptors>
		<interceptor-stack name="myInterceptors">
				<interceptor-ref name="myInterceptor" />
				<interceptor-ref name="absInterceptor" />
			<interceptor-ref name="methodInterceptor" />
			</interceptor-stack>
		<action name="login" class="demo.login.action.LoginAction">
			<result name="success">/WEB-INF/jsp/success.jsp</result>
			<interceptor-ref name="myInterceptors" />
		</action>
	</package>

 分析:当配置到此,实质便为LoginAction配置了三个拦截器,当我们点击登录时会在控制台打印出如下语句:
开始拦截
Abs开始拦截
method开始拦截
--先执行拦截器,再执行此Action
method结束拦截
Abs结束拦截
结束拦截
其实当我们点击登录时,本来是要访问LoginAction,最后会把LoginAction的执行结果传递给访问者。但是当我们配置了拦截器时,当我们去访问Action时,会首先被拦截,随后拦截器执行一些操作后才会继续把请求传递下去。下面作图说明拦截流程:



 结合现实理解:比如我们要去某楼层找某人(LoginAction)取一个资源(LoginAction处理后返回的结果,这里表现为success.jsp),(1)进楼层时会被大门保安拦截检查(第一个拦截器:MyInterceptor拦截器),(2)检查通过后再进电梯时会被电梯保安员检查(第二个拦截器:MyAbstractInterceptor拦截器),(3)检查通过后再上到某楼层会被楼层保安员检查(第三个拦截器:MethodAction拦截器
),(4)检查通过后会找到某个(LoginAction),并与某个交谈(LoginAction处理),随后某个人和我们会带着请求的资源出去,(5)出去时,会依次被楼层,电梯,大门保安员检查,最终检查通过。某个人把资源给我们(实质就是返回请求资源给客户端)。 其实拦截器的执行流程和过滤器差不多,所以我们不防用过滤器的眼光来看这些拦截器。
注意:我们在为LoginAction配置拦截器时,都没使用默认的拦截器,是原因这里的测试可以不用,但是以后在我们使用自定义的拦截器是,一定要加上默认的拦截器,否则会导致许多不可预知的结果。
补充:从上面的图并结合代码,我们可以看出拦截器的核心过程应该是ActionInvocation对这些拦截器回调处理,下面我们我们作图分析ActionInvocation的实现过程:



 上面分别使用了三种方式来创建自定义的拦截器,第一种方式是最原始的实现方式,第二种方式的好处是我们可以不必重写所有的方法,较常用。第三种方式进行了扩展.

 

 

  • 大小: 26.3 KB
  • 大小: 19.3 KB
分享到:
评论

相关推荐

    Struts2拦截器(Interceptor)

    Struts2拦截器(Interceptor) Struts2拦截器(Interceptor)

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

    在Struts2中,拦截器(Interceptors)扮演着核心角色,增强了框架的功能和灵活性。这篇文章将深入探讨Struts2拦截器的概念、工作原理以及如何在实际应用中使用它们。 **一、什么是Struts2拦截器** 拦截器是基于AOP...

    struts2 拦截器

    2. **拦截器链**:在Struts2中,多个拦截器可以形成一个拦截器链,每个拦截器按照定义的顺序依次执行。如果所有拦截器都允许Action执行,那么Action的结果将被传递到下一个拦截器,直到整个链执行完毕。 ### 二、...

    struts2中拦截器的使用

    在Struts2中,拦截器的使用主要基于两个方面:配置文件中的声明式使用和注解的编程式使用。首先,我们来看看配置文件中的声明式使用。在struts.xml或类似的配置文件中,你可以通过`&lt;interceptor&gt;`元素定义拦截器,并...

    Struts2编码拦截器

    解决Struts2中的中文乱码。该代码是用作Struts2的拦截器中

    Struts2拦截器源码

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

    struts2实现拦截器、

    在Struts2中,拦截器(Interceptor)是一个至关重要的概念,它允许开发者在动作执行前后插入自定义逻辑,比如权限检查、日志记录、性能监控等。本文将深入探讨如何使用Struts2实现拦截器,以及如何配置拦截器来实现...

    Struts2学习案例(拦截器)

    在Struts2中,拦截器是基于Java的动态AOP(面向切面编程)实现的,它可以在Action调用前后插入额外的逻辑,比如日志记录、权限验证、事务管理等。拦截器通过配置文件或者注解与Action关联,形成一个拦截器栈,每个...

    struts2 拦截器实例

    在Struts2中,拦截器(Interceptor)扮演着核心角色,它们允许开发者在Action执行前后插入自定义的逻辑,如日志、权限检查、事务管理等。现在我们将深入探讨Struts2的拦截器机制及其实例应用。 ### 一、Struts2拦截...

    详解Struts2拦截器

    拦截器不仅在Struts2中扮演着重要角色,更是整个框架灵活性与扩展性的基石。本文将深入探讨Struts2拦截器的基本概念、工作原理以及其实现机制,并结合实际应用场景来展示如何利用拦截器提高代码的复用性与可维护性。...

    struts2拦截器

    在Struts2中,拦截器(Interceptor)是核心功能之一,用于增强应用的功能和处理业务逻辑。拦截器是基于AOP(面向切面编程)的概念,可以在动作执行前后插入额外的操作,比如日志记录、权限检查、数据验证等。 标题...

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

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

    Struts2拦截器实现权限控制demo

    在Struts2中,拦截器是实现业务逻辑控制和增强功能的重要机制,它们扮演着类似于AOP(面向切面编程)的角色,允许在动作执行前后插入自定义逻辑。在这个“Struts2拦截器实现权限控制demo”中,我们将深入探讨如何...

    struts2拦截器应用小例子

    在Struts2中,拦截器(Interceptor)扮演着核心角色,它们允许开发者在动作执行前后插入自定义的逻辑,如日志、权限检查、数据验证等。本示例将探讨如何在Struts2中使用拦截器。 首先,我们需要理解Struts2拦截器的...

    struts2常用拦截器

    struts2常用拦截器,struts2经常用到的拦截器,熟悉熟悉

    Struts2 拦截器

    在Struts2中,拦截器就像过滤器一样工作,通过链式调用在动作执行前后进行预处理和后处理。 首先,我们来理解一下拦截器的基本概念。拦截器是在Action调用之前和之后执行的一段代码,可以用来做日志记录、权限检查...

    struts2注解与拦截器demo

    该例子为struts2注解与拦截器demo,利用myEclipse8.5开发,导入刚才后,自动加载所需struts2的jar包,可以直接运行,是初学struts2注解、拦截器很好的例子,保证10分钟学会2种技术,愿意分享给大家。

    难经3:Struts2,拦截器拦不住Result?

    拦截器是Struts2中的一个关键概念,它允许开发者在Action执行前后插入自定义的处理逻辑。例如,可以使用拦截器实现登录验证、日志记录、性能监控等功能。拦截器通过链式结构串联起来,形成一个执行栈,每个Action...

    简单理解Struts2中拦截器与过滤器的区别及执行顺序

    Struts2 中拦截器与过滤器的区别及执行顺序 Struts2 中的拦截器(Interceptor)和过滤器(Filter)是两个不同的概念,虽然它们都可以影响请求的处理过程,但它们的作用域、执行顺序和实现机制都有所不同。 拦截器...

    Struts2拦截器源程序

    在Struts2中,拦截器扮演着至关重要的角色,它们是实现MVC(Model-View-Controller)架构的关键组件之一。拦截器允许开发者在动作执行前后插入自定义逻辑,比如日志记录、权限检查、数据验证等,而无需修改核心业务...

Global site tag (gtag.js) - Google Analytics