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 拦截器详解 #### 一、概述 在现代Web开发中,特别是基于Java的Web应用程序开发中,Struts2框架因其简洁性和强大的扩展能力而备受青睐。Struts2框架的核心设计理念之一是MVC(Model-View-...
Struts2 Interceptor详解 Struts2作为一款流行的Java Web框架,其强大的功能之一就是拦截器(Interceptor)。拦截器在MVC模式中扮演着重要角色,它可以对请求进行预处理和后处理,提供了灵活的扩展机制,使得业务...
### Struts2拦截器详解 #### 一、Struts2拦截器概述 Struts2框架作为Java Web开发中的一种流行框架,其核心组件之一便是**拦截器**。拦截器不仅在Struts2中扮演着重要角色,更是整个框架灵活性与扩展性的基石。...
在Struts2中,拦截器(Interceptors)扮演着核心角色,增强了框架的功能和灵活性。这篇文章将深入探讨Struts2拦截器的概念、工作原理以及如何在实际应用中使用它们。 **一、什么是Struts2拦截器** 拦截器是基于AOP...
1. 拦截器栈:Struts2中的拦截器不是单独工作的,而是以栈的形式存在,称为拦截器栈。每个拦截器都有一个进入方法(invoke)和一个退出方法,当请求到达时,会按照栈的顺序逐个调用进入方法,直到到达目标Action;...
Struts2中的拦截器需要实现`Interceptor`接口,但大部分情况下我们会继承`AbstractInterceptor`抽象类来简化实现。`AbstractInterceptor`提供了一个空的初始化`init()`和销毁`destroy()`方法,以及一个抽象的`...
- 在Struts2中,拦截器是一个实现了`Interceptor`接口的类,它通过`ActionInvocation`对象来控制动作的执行流程。拦截器链是由多个拦截器按照指定顺序组成的,每个拦截器都可以在执行动作之前或之后进行操作。 2. ...
通过以上详细介绍,我们了解了Struts2中的拦截器和验证框架的基本概念、如何创建自定义拦截器以及如何配置拦截器和使用验证功能。这些知识点对于初学者来说非常重要,能够帮助他们更好地理解和使用Struts2框架。
在Struts2的配置文件中,可以通过`<interceptor-stack>`标签定义拦截器栈,然后在`<action>`标签中引用这些拦截器栈。 例如: ```xml <interceptor-stack name="basicStack"> <interceptor-ref name="exception"/>...
Struts2 拦截器详解 Struts2 框架中的拦截器(Interceptor)是一种强大的机制,它允许开发者在Action执行前后插入自定义的行为,增强了应用的灵活性和可扩展性。拦截器是基于Java的动态AOP(面向切面编程)实现,...
### Struts2的拦截器详解 #### 概述 在Java Web开发中,Struts2框架因其灵活性和扩展性而受到广泛欢迎。其中,拦截器(Interceptor)是Struts2框架的一个核心特性,用于处理Action的公共行为,类似于Spring框架中...
### Struts2拦截器详解 #### 一、拦截器的概念与意义 拦截器(Interceptor)在Struts2框架中扮演着至关重要的角色。它的工作原理类似于过滤器(Filter),能够拦截用户请求,并对其进行预处理或者后处理。拦截器...
Struts2是一个流行的Java web框架,它引入了拦截器(Interceptor)的概念,这是一种基于AOP(面向切面编程)的设计模式,用于在Action执行前后插入额外的处理逻辑。拦截器的使用大大增强了代码的可维护性和可扩展性...
Interceptor 元素是 Struts.xml 文件中的另一个基本元素,用于定义拦截器。在 Interceptor 元素中,我们可以定义拦截器的名称、类路径等信息。 例如,在上面的代码中,我们定义了两个拦截器,分别名为 "timer" 和 ...
Struts2的核心是拦截器(Interceptor)机制,通过一系列可配置的拦截器来处理请求和响应。Struts2提供了丰富的内置拦截器,这些拦截器可以单独使用,也可以组合使用,以满足不同的业务需求。接下来将详细介绍Struts2...
拦截器机制的作用是相当大的,在Struts2中几乎70%的工作都是由拦截器完成的。拦截器机制可以实现各种功能,如上传文件、参数设置、身份验证等。 一、拦截器在Struts中的作用 在Struts2中,拦截器机制主要负责拦截...
本文档将详细介绍如何在Struts2框架中创建一个登录验证拦截器,以确保除了登录请求外,所有其他请求都会被拦截,并检查用户的登录状态。 #### 登录校验拦截器的工作原理 登录校验拦截器的主要作用是检查用户是否...
在Java中定义一个新的拦截器类,继承自Struts2的Interceptor接口或使用现有的拦截器作为基础进行扩展。 2. **拦截器逻辑** - **登录状态检查**:拦截器需要能够从Session或其他地方获取用户的登录状态。 - **...