`
世纪魔面
  • 浏览: 19092 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Struts2中拦截器Interceptor详解

阅读更多

 

 

Struts2中的拦截器(Interceptor)用于拦截action。

一、定义一个拦截器MyInterceptor

package test.interceptor;
public class MyInterceptor implements Interceptor {
	@Override
	public void destroy() {
		System.out.println("destroy");
	}

	@Override
	public void init() {
		System.out.println("init");
	}

	@Override
	public String intercept(ActionInvocation arg0) throws Exception {
		System.out.println("interceptor invoke");
		arg0.invoke();
	}

}

 

        通过以上代码,可以看出,定义一个拦截器的方法其实很简单,只需要实现Interceptor接口,并实现接口中定义的这三个方法即可。

 

二、配置拦截器

        在struts.xml文件中配置刚才定义好的拦截器

<interceptors>
	<interceptor name="MyInterceptor" class="text.interceptor.MyInterceptor">
	</interceptor>
</interceptors>

         到这一步,总算是把拦截器配置OK了,但是这仅仅是将拦截器声明好而已,这个时候,拦截器还无法正常工作的。因为拦截器是用来拦截Action的,到现在为止,我们还没有定义该拦截器用来拦截哪一个Action。那么要想让其工作,还要在想要进行拦截的Action中加入以下定义语句

<action name="XXX" class="xxx.xxx.xxx">

	<result name="success">/index.jsp</result>
	
	<interceptor-ref name="MyInterceptor"></interceptor-ref>

</action>

        到目前为止,当调用这个Action的时候,拦截器就会很听话的跑起来了。可以,要注意一点,如果配置了全局的默认拦截器,又为某个Action定义了局部拦截器,这种情况下,全局的拦截器将失效。

        呵呵,不用担心,问题肯定是有办法解决的,只需要将原来那个默认的拦截器栈也引用进来即可:

<action name="XXX" class="xxx.xxx.xxx">

	<result name="success">/index.jsp</result>
	
	<interceptor-ref name="MyInterceptor"></interceptor-ref>

	<interceptor-ref name="defaultStack"></interceptor-ref>

</action>

        好的,问题解决了,但是这样显得很麻烦,那么有没有简便一些的方法呢?答案肯定是有的,不急,接着向下看。

 

三、拦截器初始参数

        拦截器还可以带上初始参数,方法如下:

 

<interceptors>
	<interceptor name="MyInterceptor" class="text.interceptor.MyInterceptor">
		<param name="hello">world</param>
	</interceptor>
</interceptors>

        然后在MyInterceptor.java中定义一个与param的name名称相同的变量,并为其生成Setter和Getter方法:

package test.interceptor;
public class MyInterceptor implements Interceptor {

	private String hello = null;
	
	public void setHello(String hello){
		this.hello = hello;
	}

	public String getHello(){

		return this.hello;
	}
	
	@Override
	public void destroy() {
		System.out.println("destroy");
	}

	@Override
	public void init() {
		System.out.println(this.hello);
		System.out.println("init");

	}

	@Override
	public String intercept(ActionInvocation arg0) throws Exception {
		System.out.println("interceptor invoke");
		arg0.invoke();
	}

}

        这样一来,Struts2就会自动将hello的值为MyInterceptor类中的hello变量赋值,就可以在程序中会用该值了。当然,我们还可以在使用拦截器的时候,重新为Param分配新值,方法如下:

<action name="XXX" class="xxx.xxx.xxx">

	<result name="success">/index.jsp</result>
	
	<interceptor-ref name="MyInterceptor">
		<param name="hello">welcome</param>
	</interceptor-ref>

	<interceptor-ref name="defaultStack"></interceptor-ref>
</action> 

        这样,在程序中,取到的值就是"welcome"了。

 

四、自定义拦截器栈

        下面我们先看一下如何自定义一个拦截器栈。

 

<interceptors>
	<interceptor name="MyInterceptor" class="text.interceptor.MyInterceptor">
		<param name="hello">world</param>
	</interceptor>

	<interceptor-stack name="MyStack">
		<interceptor-ref name="MyInterceptor"></interceptor-ref>
		<interceptor-ref name="defaultStack"></interceptor-ref>
	</interceptor-stack>	
</interceptors>

        好了,一个自定义的拦截器栈就这样成型了,在定义拦截器栈的时候,可以包含拦截器或者拦截器栈。

        下面,就可以在Action中直接引用自定义的这个MyStack拦截器栈,而不用引用多个拦截器了。看,是不是方便了一些啊。

 

五、自定义默认拦截器栈

        其实呢,还有更方便的一种方式,因为呀,一个<package></package>元素里面可以定义一个默认的拦截器,这样的话,该package中的所有Action就默认带上了这个拦截器。定义方法非常的简单,但记住,一个Package中有且只有一个默认拦截器。

<default-interceptor-ref name="MyStack" /> 

        只需要在Package元素中加入上面这一句即可,这个包当中的所有Action就会被套上MyStack拦截器。哈哈。这下可真方便了。 

 

小结:

        1、如果配置了全局的默认拦截器,又为某个Action单独定义了局部拦截器,全局拦截器将失效。

        2、一个<package></package>中,有且只有一个默认拦截器

分享到:
评论

相关推荐

    struts2 Interceptor拦截器

    ### Struts2 Interceptor 拦截器详解 #### 一、概述 在现代Web开发中,特别是基于Java的Web应用程序开发中,Struts2框架因其简洁性和强大的扩展能力而备受青睐。Struts2框架的核心设计理念之一是MVC(Model-View-...

    struts2 Interceptor详解

    Struts2 Interceptor详解 Struts2作为一款流行的Java Web框架,其强大的功能之一就是拦截器(Interceptor)。拦截器在MVC模式中扮演着重要角色,它可以对请求进行预处理和后处理,提供了灵活的扩展机制,使得业务...

    详解Struts2拦截器

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

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

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

    Struts2的拦截器的使用详解

    1. 拦截器栈:Struts2中的拦截器不是单独工作的,而是以栈的形式存在,称为拦截器栈。每个拦截器都有一个进入方法(invoke)和一个退出方法,当请求到达时,会按照栈的顺序逐个调用进入方法,直到到达目标Action;...

    一个Struts2的核心拦截器例子

    - 在Struts2中,拦截器是一个实现了`Interceptor`接口的类,它通过`ActionInvocation`对象来控制动作的执行流程。拦截器链是由多个拦截器按照指定顺序组成的,每个拦截器都可以在执行动作之前或之后进行操作。 2. ...

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

    通过以上详细介绍,我们了解了Struts2中的拦截器和验证框架的基本概念、如何创建自定义拦截器以及如何配置拦截器和使用验证功能。这些知识点对于初学者来说非常重要,能够帮助他们更好地理解和使用Struts2框架。

    struts2内置拦截器简介

    在Struts2的配置文件中,可以通过`&lt;interceptor-stack&gt;`标签定义拦截器栈,然后在`&lt;action&gt;`标签中引用这些拦截器栈。 例如: ```xml &lt;interceptor-stack name="basicStack"&gt; &lt;interceptor-ref name="exception"/&gt;...

    struts2拦截器详解 带demo

    Struts2 拦截器详解 Struts2 框架中的拦截器(Interceptor)是一种强大的机制,它允许开发者在Action执行前后插入自定义的行为,增强了应用的灵活性和可扩展性。拦截器是基于Java的动态AOP(面向切面编程)实现,...

    Struts2的拦截器

    ### Struts2的拦截器详解 #### 概述 在Java Web开发中,Struts2框架因其灵活性和扩展性而受到广泛欢迎。其中,拦截器(Interceptor)是Struts2框架的一个核心特性,用于处理Action的公共行为,类似于Spring框架中...

    struts2拦截器

    ### Struts2拦截器详解 #### 一、拦截器的概念与意义 拦截器(Interceptor)在Struts2框架中扮演着至关重要的角色。它的工作原理类似于过滤器(Filter),能够拦截用户请求,并对其进行预处理或者后处理。拦截器...

    Struts2拦截器Interceptor的原理与配置实例详解

    Struts2是一个流行的Java web框架,它引入了拦截器(Interceptor)的概念,这是一种基于AOP(面向切面编程)的设计模式,用于在Action执行前后插入额外的处理逻辑。拦截器的使用大大增强了代码的可维护性和可扩展性...

    Struts2中Struts.xml配置文件详解

    Interceptor 元素是 Struts.xml 文件中的另一个基本元素,用于定义拦截器。在 Interceptor 元素中,我们可以定义拦截器的名称、类路径等信息。 例如,在上面的代码中,我们定义了两个拦截器,分别名为 "timer" 和 ...

    Struts2内置拦截器简介

    Struts2的核心是拦截器(Interceptor)机制,通过一系列可配置的拦截器来处理请求和响应。Struts2提供了丰富的内置拦截器,这些拦截器可以单独使用,也可以组合使用,以满足不同的业务需求。接下来将详细介绍Struts2...

    详解Struts2拦截器机制

    拦截器机制的作用是相当大的,在Struts2中几乎70%的工作都是由拦截器完成的。拦截器机制可以实现各种功能,如上传文件、参数设置、身份验证等。 一、拦截器在Struts中的作用 在Struts2中,拦截器机制主要负责拦截...

    Struts2拦截器实例.docx

    本文档将详细介绍如何在Struts2框架中创建一个登录验证拦截器,以确保除了登录请求外,所有其他请求都会被拦截,并检查用户的登录状态。 #### 登录校验拦截器的工作原理 登录校验拦截器的主要作用是检查用户是否...

    struts2登录拦截器

    在Java中定义一个新的拦截器类,继承自Struts2的Interceptor接口或使用现有的拦截器作为基础进行扩展。 2. **拦截器逻辑** - **登录状态检查**:拦截器需要能够从Session或其他地方获取用户的登录状态。 - **...

Global site tag (gtag.js) - Google Analytics