什么是拦截器?

struts2中拦截器分为Struts2定义好的拦截器和自己定义的拦截器。

其作用是在一个Action运行之前进行拦截,在Action运行之后又增加某些操作。

实现原理

当请求一个Action时,struts2会查找配置文件,并依据这个Action的配置实例化相应的拦截器对象,然后串成一个列表(list)。最后一个一个地调用列表中的拦截器。

拦截器的运行流程

1、对Action进行预处理。(正序运行)

2、拦截器自身决定该不该运行兴许的拦截器(由invoke()方法的返回值决定)。

3、对Action进行后期处理。

(倒序运行)

源代码:自己定义拦截器

方法一:实现Interceptor接口。重写其方法

package org.Test.interceptor;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor; public class TestInterceptor1 implements Interceptor { //实现Interceptor接口 public TestInterceptor1() { // 构造方法,server启动时就生成一个interceptor实例
System.out.println("TestInterceptor1 cons");
} @Override
public void destroy() { // 相似于析构方法,用于释放资源
System.out.println("TestInterceptor1 destory");
} @Override
public void init() { // server启动时被调用来初始化一些相关资源,相似于构造方法
System.out.println("TestInterceptor1 init");
} @Override
public String intercept(ActionInvocation invocation) throws Exception {
System.out.println("TestInterceptor1 intercept go"); // 開始运行该拦截器
String resultName = invocation.invoke(); // 运行下一个拦截器或运行Action的execute()方法
System.out.println("TestInterceptor1 intercept back"); // 返回该拦截器 System.out.println("TestInterceptor1 resultName:" + resultName); // 打印调用的下一个拦截器或Action的返回值
return resultName;
} }

方法二:继承MethodFilterInterceptor类,重写doIntercept()方法

package org.Test.interceptor;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.opensymphony.xwork2.interceptor.Interceptor; public class TestInterceptor2 extends AbstractInterceptor{ //继承AbstractInterceptor,无需重写init(),destroy()方法 @Override
public String intercept(ActionInvocation invocation) throws Exception {
System.out.println("TestInterceptor2 intercept go");
String resultName = invocation.invoke();
System.out.println("TestInterceptor2 intercept back"); System.out.println("TestInterceptor2 resultName:" + resultName);
return resultName;
} }

源代码:配置struts.xml

<package name="default" namespace="/" extends="struts-default">

        <!-- 配置自己定义拦截器 -->
<interceptors>
<interceptor name="TestInterceptor1" class="org.Test.interceptor.TestInterceptor1"/>
<interceptor name="TestInterceptor2" class="org.Test.interceptor.TestInterceptor2"/>
</interceptors> <default-action-ref name="default" /> <action name="test" class="org.Test.action.TestAction">
<result name="success">/success.jsp</result>
<result name="error">/error.jsp</result> <!-- 在这个Action中使用自己定义的拦截器 -->
<interceptor-ref name="TestInterceptor1"/>
<interceptor-ref name="TestInterceptor2"/>
</action> <action name="default">
<result>/index.jsp</result>
</action>
</package>

源代码:Action的定义

public class TestAction extends ActionSupport {

    @Override
public String execute() throws Exception {
System.out.println("TestAction execute");
return SUCCESS;
}
}

运行结果

1.拦截器按其在action中增加的先后顺序依次被调用。这里先调用TestInterceptor1,后调用TestInterceptor2。

2.当全部的拦截器运行完了之后才运行Action

3.然后从Action依次往上一个调用点后退。从TestAction退到TestInterceptor2,从TestInterceptor2退到TestInterceptor1。

来一张图理解

struts2学习笔记(5)---自己定义拦截器的更多相关文章

  1. Struts2学习笔记四:深入拦截器

    一:拦截器的工作原理 拦截器的执行过程可以类比filter过滤器,ActionInvocation实例执行过程中,先执行action实例上引用的拦截器们,然后才执行action实例处理请求,返回res ...

  2. struts2学习笔记(六)—— 拦截器

    一.拦截器概述 拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前进行拦截,然后在之前或之后加入某些操作.拦截器是AOP的一种实现策略. 在We ...

  3. struts2学习笔记(5)拦截器

    继承AbstractInterceptor类,在类中完成拦截器的功能,只需实现intercept方法即可,提供了init()和destroy()的空实现 示例:显示执行action所用的时间 ①在sr ...

  4. struts2视频学习笔记 18(自定义拦截器)

    课时18 自定义拦截 因为struts2中如文件上传,数据验证,封装请求参数到action等功能都是由系统默认的defaultStack中的拦截器实现的,所以我们定义的拦截器需要引用系统默认的defa ...

  5. SprimgMVC学习笔记(十)—— 拦截器

    一. 什么是拦截器? Spring MVC中的拦截器(Interceptor)类似于Servlet中的过滤器(Filter),它主要用于拦截用户请求并作相应的处理.例如通过拦截器可以进行权限验证.记录 ...

  6. SpringMVC框架学习笔记(6)——拦截器

    SpringMVC拦截器需要实现接口HandlerInterceptor 有3个方法,分别在请求处理前.请求处理后和在DispatcherServlet处理后执行 实现代码: package inte ...

  7. Struts2学习笔记 - Action篇<定义逻辑Action>

    有三种方法可以使一个Action处理多个请求 动态方法调用DMI 定义逻辑Acton 在配置文件中使用通配符 这文章就谈论一下定义逻辑Action 这里主要关注的是struts.xml配置文件,一般情 ...

  8. struts2学习笔记--拦截器(Interceptor)和登录权限验证Demo

    理解 Interceptor拦截器类似于我们学过的过滤器,是可以在action执行前后执行的代码.是我们做web开发是经常使用的技术,比如权限控制,日志.我们也可以把多个interceptor连在一起 ...

  9. Struts2学习笔记(拦截器配置添加)

    一.拦截器工作原理: 根据Struts2的工作原理图,拦截器在action执行前进行顺序调用,之后执行Action并返回结果字符串,再逆序调用拦截器.(结构类似递归方式...)大部分时候,拦截器方法都 ...

随机推荐

  1. SPOJ 962 Intergalactic Map (从A到B再到C的路线)

    [题意]在一个无向图中,一个人要从A点赶往B点,之后再赶往C点,且要求中途不能多次经过同一个点.问是否存在这样的路线.(3 <= N <= 30011, 1 <= M <= 5 ...

  2. iOS使用WSDL2ObjC工具调用Webservice接口

    1. 下载 WSDL2ObjC.app https://code.google.com/archive/p/wsdl2objc/downloads 2:下载WSDL文件 2.1一般情况下, 你会得到这 ...

  3. 44、网页启动Activity,网页传值Activity

         在assets新建一个demo.html 文件. <html> <head> <meta http-equiv="Content-Type" ...

  4. win7(64位)+IE8+QC9.0

    环境win7(64位)+IE8+QC9.0出现的问题IE8访问QC9.0有时访问登录显示正常,但是有时访问QC页面无法显示正常,然后在ie8中安全中设置“启用内存保护帮助减少联机攻击*”也无法找到该项 ...

  5. iOS7程序后台运行

    介绍 这次 iOS7 对程序后台运行进行了加强,但是仅仅是加强而已,要想像 Android 程序那样自由当然就别想了,苹果这么做主要还是出于电池使用时间考虑,但是这次的加强对大部分程序基本够用. 在介 ...

  6. 设计模式_Visitor_访问者模式

    形象例子: 情人节到了,要给每个MM送一束鲜花和一张卡片,可是每个MM送的花都要针 对她个人的特点,每张卡片也要根据个人的特点来挑,我一个人哪搞得清楚,还是找花店老板和礼品店老板做一下Visitor, ...

  7. java.lang.UnsupportedOperationException

    在运行路况预测这个项目时,报错出现:java.lang.UnsupportedOperationException 原因:我将1.3版本和1.6版本的两个jar包都Add to Build Path ...

  8. .Net高级技术

    本次课程中讲的有的东西都是根据初学者的认知规律进行了调整,并不是严谨的,比如很多地方在多AppDomain条件下很多说法就不对了,但是说严谨了大家就晕了,因此继续不严谨的讲吧. 很多面试题都在这阶段的 ...

  9. List 接口以及实现类和相关类源码分析

    List 接口以及实现类和相关类源码分析 List接口分析 接口描述 用户可以对列表进行随机的读取(get),插入(add),删除(remove),修改(set),也可批量增加(addAll),删除( ...

  10. 深度学习多机多卡解决方案-purine

    未经允许请不要转载,原作者:zhxfl,http://www.cnblogs.com/zhxfl/p/5287644.html 目录: 一.简介 二.环境配置 三.运行demo 四.硬件配置建议 五. ...