SpringMVC和Struts2中拦截器实现思路思想
来源:互联网 发布:侠义 知乎 编辑:程序博客网 时间:2024/06/09 19:18
SpringMVC中拦截器的实现思想
springMVC中拦截器的实现主要是通过doFilte()方法的返回值(boolean)来控制拦截器是否继续向下执行,如果返回true执行,则放行到下一个拦截器或者放行到最终处理请求的方法中。如果在执行中途返回了false,则触发执行triggerAfter()方法,否则就一直执行完处理请求的那个方法再触发执行triggerAfter()方法。(注:after()方法和before()方法是在拦截请求之前和之后可以做一些事情,这里是通过拦截器来实现的,其实还可以用动态代理来实现,但是这里不进行讲述)
package org.springmvcinterceptor;
import java.util.ArrayList;
import java.util.List;
public class InterceptorExecutor {
private List<Interceptor> interceptorList=new ArrayList<>();private int interceptorIndex=-1;public InterceptorExecutor(){ interceptorList.add(new Interceptor1()); interceptorList.add(new Interceptor2()); interceptorList.add(new Interceptor3());}/** * 控制执行所有过滤器中的方法 */public void execute(){ for(int i=0;i<interceptorList.size();i++){ if(interceptorList.get(i).doFilter()){ interceptorList.get(i).before(); interceptorList.get(i).doFilter(); //记录好程序执行到哪个拦截器 interceptorIndex=i; }else{ triggerAfter(); } }}/** * 当doFilter方法返回false时(即程序被拦截不放行时) * 触发执行之前执行过doFilter方法的拦截器的after方法 */public void triggerAfter(){ for(int j=interceptorIndex-1;j>0;j--){ interceptorList.get(j).after(); }}
}
package org.springmvcinterceptor;
public interface Interceptor {
boolean before();boolean doFilter();void after();
}
package org.springmvcinterceptor;
public class Interceptor1 implements Interceptor {
@Override
public boolean before() {
return true;
}
@Overridepublic boolean doFilter() { return false;}@Overridepublic void after() {}
}
package org.springmvcinterceptor;
public class Interceptor2 implements Interceptor {
@Override
public boolean before() {
return true;
}
@Overridepublic boolean doFilter() { return false;}@Overridepublic void after() {}
}
package org.springmvcinterceptor;
public class Interceptor3 implements Interceptor {
@Override
public boolean before() {
return false;
}
@Overridepublic boolean doFilter() { return false;}@Overridepublic void after() {}
}
Struts2中拦截器的实现
struts2中的拦截器是通过递归的方式来实现的,假设有一个A,在类的构造方法中将所有元素放到list集合中,在A方法中调用类B的bm1()方法,并将A对象自身(this)传给B类,在B类中又调用A类中的am1()方法,在B类调用A类am1()方法之前可以做一些事情,类似于拦截器的before()方法,在之后做的事情类似于拦截器的after()方法,跳出递归的条件相当于执行完了最终处理请求的方法。
public class A {
private C c = new C();List<B> bList = new ArrayList<>();public A(){ bList.add(new B(1)); bList.add(new B(2)); bList.add(new B(3)); bList.add(new B(4));}private int i = -1;public void am1(){ i++; if(i>= bList.size()) { c.cm1(); }else { B b = bList.get(i); b.bm1(this); //System.out.println("method 1 in a----" + i); }}
}
public class B {
private int id;
public B(int id) { this.id = id;}public void bm1(A a){ System.out.println("method 1 in B before*****" + id); a.am1(); System.out.println("method 1 in b after -----" + id);}
}
public class Main {
public static void main(String[] args) {
A a = new A();
a.am1();
}
}
执行结果:
method 1 in B before*****1
method 1 in B before*****2
method 1 in B before*****3
method 1 in B before*****4
method 1 in c—–
method 1 in b after —–4
method 1 in b after —–3
method 1 in b after —–2
method 1 in b after —–1
- SpringMVC和Struts2中拦截器实现思路思想
- 谈一谈struts2和springmvc的拦截器
- struts2中拦截器的全局拦截和自定义拦截
- SpringMVC中实现自己的拦截器
- 过滤器和拦截器(SpringMVC实现)
- Struts2中拦截器的简单实现
- springmvc和struts2拦截器的简单使用以及配置
- springmvc拦截器实现
- SpringMVC 拦截器实现
- SpringMVC 拦截器实现
- struts2 拦截器的原理和实现
- Struts2拦截器 实现未登录拦截和权限控制
- Struts2拦截器 实现未登录拦截和权限控制
- Struts2中拦截器和过滤器详解
- struts2 拦截器实现
- SpringMVC中拦截/和拦截/*的区别
- SpringMVC中拦截/和拦截/*的区别
- SpringMVC中拦截/和拦截/*的区别
- hadoop namenode启动失败
- Json转pojo或转List, pojo转json
- 挑战程序设计竞赛2 算法和数据结构 读后感
- TeraTerm Language 帮助文档1-[如何运行]
- JAVA——动态代理
- SpringMVC和Struts2中拦截器实现思路思想
- 问题 G: 整数转字符串
- Java操作符
- HDOJ 2016 数据的交换输出
- 图片验证码
- 把OSC_IN/OSC_OUT引脚作为GPIO端口PD0/PD1
- Django模型字段常用的类型
- TensorFlow入门教程
- HDOJ 2017 字符串统计