|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
JAVA学习必须明确这是一项投资,对于大多数的人来说,学习JAVA是为了就业,还有就是刚走向工作位置的朋友想尽快赶上工作的节奏。web
上面我们再来剖析另外一个拦阻器的完成ModelDrivenInterceptor,起首说说他的计划目标,我们晓得在Struts中一般有一个ActionFormBean他是用来封装哀求数据的,在WebWork2.x中这一功效失掉了进一步的发扬,他能够完成两中Action驱动形式,他们都是信息照顾者.
Property-Driven
Model-Driven
最普通的注释就是,Property-Driven经由过程属性来贯串全部MVC,而Model-Driven就是经由过程Model对象来贯串全部MVC.
他们的存在体例:Model-Drive就是自力的一个类,而Property-Driven则必需依靠于你自界说的Action类
假如我们用Model-Drive体例,那末就必需在设置文件中增加ModelDrivenInterceptor拦阻器,由这个拦阻器向我们的ModelBean中传送值,且你的Action中也必需完成ModelDriven接口,用于猎取该ModelBean,上面来看看这个拦阻器的详细完成,来做进一步的剖析,代码以下:
publicclassModelDrivenInterceptorextendsAroundInterceptor{
//~Methods////////////////////////////////////////////////////////////////
protectedvoidafter(ActionInvocationdispatcher,Stringresult)throwsException{}
protectedvoidbefore(ActionInvocationinvocation)throwsException{
Actionaction=invocation.getAction();
if(actioninstanceofModelDriven){
//判别该Action是不是完成了ModelDriven接口,假如完成了这个ModelDriven接口,他将向这个Action所对应的Model传送信息
ModelDrivenmodelDriven=(ModelDriven)action;
OgnlValueStackstack=invocation.getStack();
//用于猎取Action中的ModelBean,并压进OgnlValueStack
stack.push(modelDriven.getModel());
}
}
}
关于OgnlValueStack的详细信息请参考http://www.ognl.org
从下面的这个publicStringintercept(ActionInvocationinvocation)办法中我们能够看出一切的拦阻器都是经由过程ActionInvocation来实行调剂的,我们能够称DefaultActionInvocation为XWork1.x的调剂器,说的这里我想列位对WebWork2.x的拦阻器也有了一个也许的懂得.
既然DefaultActionInvocation是xWork1.x的调剂器,不剖析他是说不外往的,接上去我们剖析ActionInvocation的完成者DefaultActionInvocation的源码,已窥其事实
因为之前也剖析过DefaultActionInvocation的一些代码,上面则节选部分还没有剖析的代码来完成扼要的剖析
publicclassDefaultActionInvocationimplementsActionInvocation{
//在这里Result是一个接口,而ActionChainResult是他的一个完成,他的目标是用于处置ActionChain的,在这里对ActionChain做以下申明:
一般一个Action实行终了,要末是前往表单,要末前往别的一个Action,来持续实行,假如前往了Action则就构成了ActionChain举措链,然后持续实行这个新的Action,直到前往一个non-chain了局
publicResultgetResult()throwsException{
ResultreturnResult=result;
//IfwevechainedtootherActions,weneedtofindthelastresult
while(returnResultinstanceofActionChainResult){
ActionProxyaProxy=((ActionChainResult)returnResult).getProxy();
if(aProxy!=null){
ResultproxyResult=aProxy.getInvocation().getResult();
if((proxyResult!=null)&&(aProxy.getExecuteResult())){
returnResult=proxyResult;
}else{break;}
}else{break;}
}
returnreturnResult;
}
//前往Stack
publicOgnlValueStackgetStack(){
returnstack;
}
…
//上面的办法我就不在赘述了,我想人人就是看称号也应当能够懂得一二,假如有甚么疑问,请参考后面的剖析
protectedvoidcreateAction(){
//loadaction
try{
action=ObjectFactory.getObjectFactory().buildAction(proxy.getConfig());
…
}
protectedStringinvokeAction(Actionaction,ActionConfigactionConfig)throwsException{
if(proxy.getConfig().getMethodName()==null){
returngetAction().execute();
…
}
}
你通过从书的数量和开发周期及运行速度来证明:net和ruby要比java简单。 |
|