`
chenguanwei2008
  • 浏览: 121140 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

自定义拦截器的使用

阅读更多

在Struts2中自定义拦截器,需要继承Interceptor接口,在该接口中定义了3个方法:

  • void init():该方法在拦截器执行拦截之前执行,主要用于打开一些一次性资源,如数据库连接等。
  • String intercept(AvtionInvocation invocation) throws Exception :在该方法体内定义需要执行的拦截动作,invocation参数是对被拦截的Action的引用,我们可以通过调用该参数的invoke()方法,将控制权转给下一个拦截器或者是被拦截Action的execute()方法。
  • void destroy() :与init()方法对应,在拦截器执行拦截之后执行,主要用于关闭打开的资源。

Struts2定义了一个AbstractInterceptor类,他提供了对Interceptor接口中init和destroy方法的空实现,简化了用户在自定义拦截器时的操作。

举个例子,定义一个登陆Action的拦截器:

package com.test.interceptor;

import java.util.Date;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.test.action.LoginAction;

public class SimpleInterceptor extends AbstractInterceptor {
	
	//拦截器的名称
	private String name;

	public void setName(String name) {
		this.name = name;
	}


	/**
	 * 拦截Action方法的interceptor方法
	 */
	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		
		//取得被拦截的Action实例
		LoginAction loginAction = (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;
	}

}

 然后,我们在struts.xml文件中配置拦截器:

<interceptors>
		<!-- 配置SimpleInterceptor拦截器 -->
		<interceptor name="mySimple" class="com.test.interceptor.SimpleInterceptor">
			<param name="name">简单拦截器</param>
		</interceptor>
</interceptors>
<action name="login" class="com.test.action.LoginAction">
			<result name="success">result.jsp</result>
			<!-- 拦截器一般配置在result元素之后 -->
			<!-- 引用系统默认的拦截器 -->
			<interceptor-ref name="defaultStack"/>
			<!-- 在Action中引用自定义拦截器 -->
			<interceptor-ref name="mySimple">
				<param name="name">改名后的简单拦截器一</param>
			</interceptor-ref>
			<interceptor-ref name="mySimple">
				<param name="name">改名后的简单拦截器二</param>
			</interceptor-ref>
</action>
 完成。另外,我们在配置文件中重复引用了同一个拦截器,只是为它赋予了不同的名称,通过结果我们可以看到,拦截器的引用顺序与执行顺序有一定的关系:配置在前面的拦截器,如果是在被拦截方法执行之前的拦截动作,则会先执行;如果是在被拦截方法执行之后的拦截动作,则会后执行。

分享到:
评论

相关推荐

    WebService之自定义拦截器(server+client)

    在IT行业中,Web服务是应用程序之间进行通信的一种标准方法,而WebService之自定义拦截器的实现,无论是...通过理解并熟练掌握CXF框架下的拦截器使用,开发者可以更好地驾驭Web服务,实现更高效、更安全的应用程序。

    CXF3.0+Spring3.2 自定义拦截器

    3. **Spring集成**:在Spring3.2中,我们可以使用`&lt;cxf:bus&gt;`和`&lt;cxf:interceptor&gt;`标签将自定义拦截器注册到CXF Bus中。这样,Spring容器会管理拦截器的生命周期,并在需要时注入其他依赖。 4. **拦截器链**:CXF...

    自定义拦截器的实现以及拦截器的详细配置

    本篇文章将深入探讨如何实现自定义拦截器及其在Struts2中的详细配置。 首先,我们来了解自定义拦截器的基本步骤: 1. **创建拦截器类**:自定义拦截器需要继承Struts2提供的`Interceptor`接口或实现`intercept()`...

    自定义拦截器

    通过以上步骤,我们便可以创建和使用自定义拦截器了。在实际项目中,可以根据需要组合多个拦截器,以达到灵活、高效地处理请求的目的。此外,还可以利用Struts2的注解进行配置,进一步简化代码。 总之,自定义拦截...

    springmvc(自定义拦截器的使用)

    自定义拦截器是扩展Spring MVC功能、添加自定义行为的一种常见方式。以下是对自定义拦截器实现步骤的详细解释: ### 1. 自定义拦截器类 #### 1.1 继承 `HandlerInterceptorAdapter` 你可以选择继承`...

    struts2 自定义拦截器.rar

    这篇博客文章可能是关于如何在Struts2中创建和使用自定义拦截器的教程。 在Struts2中,拦截器是基于责任链模式实现的,它们按照指定的顺序执行,对请求进行处理。拦截器可以用来进行权限检查、日志记录、事务管理等...

    Spring MVC--13.自定义拦截器

    Spring MVC--自定义拦截器Spring MVC--13.自定义拦截器Spring MVC--13.自定义拦截器Spring MVC--13.自定义拦截器Spring MVC--13.自定义拦截器Spring MVC--13.自定义拦截器Spring MVC--13.自定义拦截器

    struts2自定义拦截器配置心得

    Struts2自定义拦截器的配置是Struts2框架中一个非常重要的功能,它允许开发者在Action执行前后插入自定义的逻辑,以实现如权限验证、日志记录、性能监控等多种需求。以下是对标题和描述中涉及的知识点的详细说明: ...

    利用反射和动态代理机制实现自定义拦截器Interceptor

    利用反射和动态代理机制实现自定义拦截器Interceptor 在本文中,我们将探讨如何利用反射和动态代理机制来实现自定义拦截器Interceptor。拦截器Interceptor是一种常见的设计模式,用于在方法调用前后执行某些操作,...

    JSP 开发之Struts2内建自定义拦截器.docx

    本文将深入探讨Struts2的内建自定义拦截器及其配置。 首先,让我们理解什么是拦截器。拦截器是基于AOP(面向切面编程)思想的,它们在Action调用前后执行,形成一个拦截器链。每个拦截器都可以执行特定的任务,并且...

    10.为CXF服务器端添加自定义拦截器进行权限检查

    本文将深入探讨如何为CXF服务器端添加自定义拦截器以执行这样的权限验证。 首先,理解CXF(CXF: Apache CXF - A Next Generation JAXWS and JAX-RS API Implementation)是一个开源的Java框架,它用于创建和部署...

    Mybatis自定义拦截器,对模糊查询传值的特殊字符(\,_,%)统一进行转义处理的代码

    代码包含: EscapeUtil.java:特殊字符(\,_,%)转义工具类 MyQueryInterceptor.java: Mybatis自定义拦截器 注意:该拦截器只支持QueryWrapper的like方法,serviceImpl层传全角模糊查询(%%) mapper或xml层的全角模糊查询(%...

    SpringBoot中自定义拦截器示例代码

    本篇将详细讲解如何在Spring Boot中创建并使用自定义拦截器,并提供相关的示例代码。 首先,我们需要了解Spring MVC中的拦截器(HandlerInterceptor)接口。该接口定义了三个方法: 1. `preHandle...

    Mybatis自定义拦截器,对模糊查询传值的特殊字符统一进行转义处理的代码

    特殊字符(\,_,%)转义工具类 MyQueryInterceptor.java: Mybatis自定义拦截器 注意:该拦截器只支持QueryWrapper的like方法,serviceImpl层传全角模糊查询(%%) mapper或xml层的全角模糊查询(%*%)和半角模糊查询(%*或*%)

    SpringMvc自定义拦截器(注解)代码实例

    总的来说,Spring MVC的自定义拦截器结合注解的使用,使得在应用程序中添加额外的处理逻辑变得简单且高效。通过自定义拦截器,开发者能够更好地控制请求的生命周期,实现更精细的控制和功能扩展,提高应用的可维护性...

    struts2的自定义拦截器例子

    在这个"struts2的自定义拦截器例子"中,我们将深入探讨如何创建和使用自定义拦截器。 首先,拦截器的本质是Java的面向切面编程(AOP)思想在Struts2中的体现。它们允许开发者在动作执行前后插入自定义的逻辑,例如...

    Struts2自定义拦截器

    在深入探讨自定义拦截器之前,我们先理解一下Struts2拦截器的基本概念。 拦截器(Interceptor)是基于Java的动态代理机制实现的,它可以拦截用户的请求,对请求进行预处理,并且在Action执行后进行后处理。通过在...

    spring集成cxf客户端和服务器端demo(含自定义拦截器)

    在本项目中,"spring集成cxf客户端和服务器端demo(含自定义拦截器)"是一个实战案例,展示了如何在Spring框架下与Apache CXF服务进行整合,实现客户端和服务端的交互,并利用拦截器来增强功能。以下是这个项目涉及的...

Global site tag (gtag.js) - Google Analytics