Struts2拦截器模拟

前言:

  接触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();
    }
    
    }

     

输出结果:

-1
-2
execute!
2
1

 

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

转载于:https://www.cnblogs.com/SeaSky0606/p/4643194.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值