`

Struts2拦截器

 
阅读更多

 

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拦截后...



 

  • 大小: 27.3 KB
分享到:
评论

相关推荐

    struts2 拦截器

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

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

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

    struts2拦截器

    标题“struts2拦截器”指的是Struts2框架中的拦截器机制,这是一个关键的组件,可以让我们在不修改实际业务代码的情况下,实现对请求处理流程的扩展和定制。 描述中提到的“基于struts2的拦截器测试,实现了页面的...

    Struts2拦截器(Interceptor)

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

    Struts2 拦截器

    拦截器是Struts2框架的核心特性之一,它们扮演着处理请求、增强功能和实现业务逻辑的角色。在Struts2中,拦截器就像过滤器一样工作,通过链式调用在动作执行前后进行预处理和后处理。 首先,我们来理解一下拦截器的...

    详解Struts2拦截器

    ### Struts2拦截器详解 #### 一、Struts2拦截器概述 Struts2框架作为Java Web开发中的一种流行框架,其核心组件之一便是**拦截器**。拦截器不仅在Struts2中扮演着重要角色,更是整个框架灵活性与扩展性的基石。...

    struts2 拦截器实例

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

    Struts2拦截器实现权限控制demo

    在这个“Struts2拦截器实现权限控制demo”中,我们将深入探讨如何利用拦截器来实现细粒度的用户权限管理。 首先,我们需要了解Struts2中的拦截器工作原理。拦截器是基于Java的动态代理模式实现的,它们按照配置的...

    struts2拦截器的使用方法

    ### Struts2拦截器的使用方法 #### 一、Struts2拦截器概述 Struts2框架中的拦截器(Interceptor)是一种重要的机制,用于在Action执行前后进行一系列处理,比如参数验证、数据预处理等。它能够帮助开发者更加灵活...

    struts2拦截器应用小例子

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

    Struts2拦截器.ppt

    Struts2拦截器.ppt Struts2拦截器.ppt Struts2拦截器.ppt

    Struts2拦截器原理分析

    拦截器是Struts2框架的核心组成部分,它们在请求处理流程中起到了关键的作用。在本文中,我们将深入探讨Struts2拦截器的工作原理。 ### 一、拦截器概念 拦截器是基于Java的动态代理机制实现的,它允许我们在Action...

    struts2拦截器实现拦截不文明字迹

    拦截器是Struts2框架的一个重要组成部分,能够帮助开发者实现一些在请求处理前后执行的通用逻辑,如日志记录、权限验证、数据校验等。在本场景中,我们将探讨如何使用Struts2拦截器来实现对不文明字迹或者敏感词汇的...

    Struts2 拦截器注解(二十七)

    拦截器是Struts2框架的核心组件之一,它允许开发者在动作执行前后插入自定义逻辑,实现如权限验证、日志记录、性能优化等多种功能。在"Struts2 拦截器注解"这个主题中,我们将深入探讨如何利用注解来简化拦截器的...

    Struts2 拦截器的执行顺序(二十九)

    这篇博客“Struts2 拦截器的执行顺序(二十九)”可能探讨了Struts2拦截器链的工作原理和它们的执行顺序,这对于理解Struts2的内部机制至关重要。 首先,让我们深入理解Struts2的拦截器。拦截器是在Action调用前后...

    struts2 拦截器实现登录控制

    这篇博客“struts2 拦截器实现登录控制”显然会探讨如何利用拦截器来实现用户登录验证,从而保护应用程序的受保护资源。 首先,我们了解下Struts2拦截器的工作原理。拦截器是基于AOP(面向切面编程)的概念,它位于...

    struts2拦截器和验证框架(适合初学者-经藏版)

    ### Struts2 拦截器与验证框架详解 #### 一、Struts2概述 Struts2是一个基于Java的企业级Web应用开发框架,它继承了Struts1的优点,并在此基础上进行了很多改进,使得开发更加灵活高效。Struts2的核心是拦截器...

    Struts2拦截器源程序

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

Global site tag (gtag.js) - Google Analytics