前言:

  接触Struts2已经有一段时间,Student核心内容就是通过拦截器对接Action,实现View层的控制跳转。本文根据自身理解对Struts2进行一个Java实例的模拟,方便大家理解!

示意图


  通过以上简单的示意图,我们可以看到Struts2将ServletAPI与业务处理分离,让开发者能够在用户向客户端发送请求的时候通过拦截机制更好的进行业务层处理,提高开发效率。下面我们就通过几个Java类模拟Struts2拦截器的实现。

拦截原理

代码设计:

  • 1ActionInvocation

    package com.simulink;
    
    import java.util.ArrayList;
    import java.util.List; public class AntionInvocation { Action a = new Action();
    int index = -1;
    List<Interceptor> interceptors = new ArrayList<Interceptor>(); public AntionInvocation() {
    interceptors.add(new FirstInterceptor());
    interceptors.add(new SecondInterceptor());
    } public void invoke() {
    index++;
    // System.out.println("index:" + index);
    if (index >= this.interceptors.size()) {
    a.execute();
    } else {
    this.interceptors.get(index).intercept(this);
    }
    } }
  • FirstInterceptor类
    package com.simulink;
    
    public class FirstInterceptor implements Interceptor {
    
        @Override
    public void intercept(AntionInvocation invocation) {
    System.out.println(-1);
    invocation.invoke();
    System.out.println(1);
    } }
  • SecondInterceptor类
    package com.simulink;
    
    public class SecondInterceptor implements Interceptor {
    
        @Override
    public void intercept(AntionInvocation invocation) {
    System.out.println(-2);
    invocation.invoke();
    System.out.println(2);
    } }
  • Action类
    package com.simulink;
    
    public class Action {
    public void execute(){
    System.out.println("execute!");
    }
    }
  • 5测试类Main
    package com.simulink;
    
    public class Main {
    
    /**
    * @param args
    */
    public static void main(String[] args) {
    new AntionInvocation().invoke();
    } }

输出结果:

-
-
execute!

后记:接触过WebWork的朋友应该会发觉struts2跟其很相似,实际上Struts2就是Struts1和WebWork的结合体。其主要技术大部分来自WebWork!

Struts2拦截器模拟的更多相关文章

  1. Struts2 拦截器配置以及实现

    @(Java ThirdParty)[Struts|Interceptor] Struts2 拦截器配置以及实现 Struts2的拦截器应用于Action,可以在执行Action的方法之前,之后或者两 ...

  2. struts2 拦截器

    拦截器:对Action的访问.可以拦截到Action中某个方法.与过滤器不同,过滤器过滤的是请求.过滤JSP.html.但是拦截器不能拦截jsp.html的访问. Struts2 拦截器在访问某个 A ...

  3. Struts2拦截器的使用 (详解)

    Struts2拦截器的使用 (详解) 如何使用struts2拦截器,或者自定义拦截器.特别注意,在使用拦截器的时候,在Action里面必须最后一定要引用struts2自带的拦截器缺省堆栈default ...

  4. struts2拦截器

    一.自定义拦截器 struts2拦截器类似于servlet过滤器 首先定义一个拦截器这个拦截器实现了Interceptor接口: package cn.orlion.interceptor; impo ...

  5. Struts2拦截器初涉

    Struts2拦截器初涉 正在练习struts,本例是从一个pdf上摘抄的例子,那本pdf都不知道叫什么名字,不过感觉很适合初学者. 在这里要实现一个简单的拦截器"GreetingInter ...

  6. 浅谈Struts2拦截器的原理与实现

    拦截器与过滤器           拦截器是对调用的Action起作用,它提供了一种机制可以使开发者定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行.同时也是提供了 ...

  7. 基于SSH2框架Struts2拦截器的登录验证实现(转)

        大象在这里假设你已经弄清楚了Struts2拦截器的基本概念,可以进入实际运用了.那么我们在之前的基础上只需要做下小小的改变,就可以使用Struts2的拦截器机制实现登录的验证.     修改数 ...

  8. struts2拦截器interceptor的三种配置方法

    1.struts2拦截器interceptor的三种配置方法 方法1. 普通配置法 <struts> <package name="struts2" extend ...

  9. Struts2拦截器原理以及实例

    一.Struts2拦截器定义 1. Struts2拦截器是在访问某个Action或Action的某个方法,字段之前或之后实施拦截,并且Struts2拦截器是可插拔的,拦截器是AOP的一种实现. 2. ...

随机推荐

  1. fragment的切换(解决REPLACE的低效)

    在项目中切换Fragment,一直都是用replace()方法来替换Fragment.但是这样做有一个问题,每次切换的时候Fragment都会重新实列化,重新加载一次数据,这样做会非常消耗性能用用户的 ...

  2. 在把webpack作为本地开发依赖安装的时候报错

    在把webpack作为本地开发依赖安装的时候报错 Refusing to install webpack as a dependency of itself 原因是package.json里的name ...

  3. NSIS来自己设定快捷方式的图标

    CreateShortCut 快捷文件.lnk 目标文件 参数 图标文件 图标索引号 启动选项 键盘快捷键 描述 CreateShortCut "$DESKTOP\快捷方式.lnk" ...

  4. 夯实基础之php学习-2提高篇

    1,Jpgraph, 详见Php图形化jpgraph 2,文件系统 文件的操作步骤:打开文件->操作文件->关闭文件 打开文件fopen(filename,mode) 关闭文件fclose ...

  5. [转]java去除List中重复的元素

    java去除List中重复的元素 如果用Set ,倘若list里边的元素不是基本数据类型而是对象, 那么请覆写Object的boolean   equals(Object   obj)   和int  ...

  6. 树莓派Odroid等卡片式电脑上搭建NAS教程系列5-Samba服务器安装

    本文章首发于浩瀚先森博客,地址: http://www.guohao1206.com/2016/08/23/967.html samba时一款为了实现linux系统中的文件能在windows系统中正常 ...

  7. FineUI v3.3.1 发布了!

    关于FineUI基于 ExtJS 的专业 ASP.NET 控件库. FineUI的使命创建 No JavaScript,No CSS,No UpdatePanel,No ViewState,No We ...

  8. DOM与CSS样式表

    在前文 <DOM与元素节点内联样式>中我们了解了用 DOM 提供的接口操作元素节点内联样式的方法,今天我们来学习一下如何用 DOM 操作 CSS 样式表. CSS 样式表概况 通过使用 H ...

  9. C# WinForm应用程序降低系统内存占用方法

    这里整理了一些网上关于Winform如何降低系统内存占用的资料,供参考: 1.使用性能测试工具dotTrace 3.0,它能够计算出你程序中那些代码占用内存较多2.强制垃圾回收3.创建完对象实例后,记 ...

  10. pageEncoding与contentType属性

    1图例分析 由图中可以看出,这个两个属性没有任何关系. 把这两个设置成不同的编码格式对中文显示不会产生任何影响 2.原因分析 pageEncoding规定了以什么编码方式存储和读取,使两者保持一致性, ...