dispatch类 java_WebWork2中ServletDispatch类中的service方法

在web.xml文件里配置一个派遣器ServletDispatcher,以接收所有以action结尾的url请求。并进行http请求调度处理.

com.opensymphony.webwork.dispatcher.ServletDispatcher

webwork

*.action

当ServletDispatche调度器接收到一个.action结尾的请求时,会调用ServletDispatche类的service方法进行处理,该方法最终是创建一个ActionProxy对象,并通过执行ActionProxy中的execute方法来

调用所请求的Action的execute方法.之前要执行一些方法来创造条件:创建Action上下文===>从request中获得值堆栈stack===>创建ActionProxyFactory对象,并初始化一个DefaultActionProxy对象====>通过DefaultAction的构造函数调用ConfigurationManager获得当前请求的Action在xwork.xml中的配置信息====>DefaultActionProxy中的prepare方法通过创建一个ActionInvocation对象来实现对请求action的调用。

AroundInterceptor拦截机-->

DefaultActionInvocation中有一个数组维护了拦截机的执行顺序:

1、StaticParametersInterceptor, 2、ParametersInterceptor, 3、WebWorkConversionErrorInterceptor

4、ModelDrivenInterceptor 5、ExternalReferencesInterceptor

6、StaticParametersInterceptor 7、parametersInterceptor, 8、WebWorkConversionErrorInterceptor

9、ModelDrivenInterceptor 10、ValidationInterceptor

注:这里1、2、3、4拦截机执行了两次,为什么会执行两次呢?

疑问:这里的执行顺序和webwork-default.xml中的配置有何关联?

Action ---> 根据Action实现相应的Action,ModelDriven接口调用基类的

ParametersInterceptor中:

final Map parameters = ActionContext.getContext().getParameters();

从AroundInterceptor的context中取出页面提交字段的名称和值,然后它会先把stack.pus(modelDriven.getModel()); modelDriven.getModel()放到CompoundRoot中(CompounRoot是一个ArrayList)上面提到有四个拦截机执行两次,因为第一次要push进去一个空的对象,方便填值,第二次放的是填充好的对象。也就是Action中getModel()的对象。把值从parameters 设置到OgnlValueStack的CompoundRoot的第一个下标中的Action里的getModel()对象里code:stack.setValue(name, value);name对应的是getModel()对应的字段,value为要填充的值.

posted on 2005-12-06 23:12 java驿馆 阅读(436) 评论(0)  编辑  收藏 所属分类: J2EE随谈

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值