1700484950
1700484951
}
1700484952
1700484953
就这么简单吗?非也,其中的参数actionName指xml配置中的name属性值,它与从HTTP传递过来的请求对象是一致的,根据HTTP传递过来的actionName在xml文件中查找对应的节点(Node),然后就可以获取到该类的名称和方法,通过动态代理的方式执行该方法,在这里我们使用到了代理模式。
1700484954
1700484955
有读者可能听说过反射是影响性能的,它提供解释型操作。是这样的,但是实际应用还没有这么高的要求,把数据库设计得优秀一点,系统架构多考虑一点,提升的性能远比这个多。
1700484956
1700484957
然后我们再来看拦截器,拦截器和过滤器的区别就是:拦截器可以脱离容器(J2EE容器)运行,而过滤器不行。拦截器的目的是对数据和行为进行过滤,符合条件的才可以执行Action,或者是在Action执行完毕后,调用拦截器进行回收处理。我们定义一个抽象的拦截器,如代码清单38-15所示。
1700484958
1700484959
代码清单38-15 抽象拦截器
1700484960
1700484961
public abstract class AbstractInterceptor{
1700484962
1700484963
//获得当前的值栈
1700484964
1700484965
private ValueStack valueStack=ValueStackHelper.getValueStack();
1700484966
1700484967
//拦截器类型:前置、后置、环绕
1700484968
1700484969
private int type=0;
1700484970
1700484971
//当前的值栈
1700484972
1700484973
protected ValueStack getValueStack(){
1700484974
1700484975
return valueStack;
1700484976
1700484977
}
1700484978
1700484979
//拦截处理
1700484980
1700484981
public final void exec(){
1700484982
1700484983
//根据type不同,处理方式也不同
1700484984
1700484985
}
1700484986
1700484987
//拦截器类型
1700484988
1700484989
protected abstract void setType(int type);
1700484990
1700484991
//子类实现的拦截器
1700484992
1700484993
protected abstract void intercept();
1700484994
1700484995
}
1700484996
1700484997
这怎么和Struts的拦截器不相同呀!是的,Struts的拦截器的拦截方法intercept是要接收一个ActionInvocation对象,这里却没有,我们主要是讲解模式,是为了技术实现,而类似Struts的MVC框架属于工业级别的应用框架,考虑了太多的外界因素。拦截器分为三种:
1700484998
1700484999
❑前置拦截器
[
上一页 ]
[ :1.70048495e+09 ]
[
下一页 ]