|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
Java的桌面程序开发在java程序员里通常叫swing开发,主要用的swing包里的类开发的,也就是通常说的c/s架构开发web
至于Action是的创立则是由ActionProxy来完成的,来看一段扼要的程序挪用
ActionProxyproxy=ActionProxyFactory.getFactory().createActionProxy(namespace,actionName,extraContext);
request.setAttribute(ServletActionContext.WEBWORK_VALUESTACK_KEY,proxy.getInvocation().getStack());//挪用ActionInvocation
proxy.execute();
实在ActionProxy是一个接口,而ActionProxyFactory则是一个笼统类,他们都是经由过程一个DefaultActionProxy和DefaultActionProxyFactory来完成操纵的,且ActionProxy将挪用ActionInvocation接口,由DefaultActionInvocation初始化的时分读取设置,然后由Invoke()办法来完成Action的挪用及一些在Action被挪用之前的Interceptor的操纵.上面是关于DefaultActionInvocation的初始化和挪用代码.
publicclassDefaultActionInvocationimplementsActionInvocation{
privatevoidinit()throwsException{
MapcontextMap=createContextMap();
createAction();//加载Action
if(pushAction){
stack.push(action);
}
invocationContext=newActionContext(contextMap);
invocationContext.setName(proxy.getActionName());
//getanewListsowedontgetproblemswiththeiteratorifsomeonechangesthelist
ListinterceptorList=newArrayList(proxy.getConfig().getInterceptors());//猎取设置
interceptors=interceptorList.iterator();
}
publicStringinvoke()throwsException{
if(executed){
thrownewIllegalStateException("Actionhasalreadyexecuted");
}
//这里是实行拦阻器的操纵,注:拦阻器自己就是AOP的一个特别完成,Servlet2.3中Filter就是一个惯例啊
if(interceptors.hasNext()){
Interceptorinterceptor=(Interceptor)interceptors.next();
resultCode=interceptor.intercept(this);
}else{
resultCode=invokeAction(getAction(),proxy.getConfig());
}
//thisisneededbecausetheresultwillbeexecuted,thencontrolwillreturntotheInterceptor,whichwill
//returnaboveandflowthroughagain
if(!executed){
if(preResultListeners!=null){
for(Iteratoriterator=preResultListeners.iterator();
iterator.hasNext();){
PreResultListenerlistener=(PreResultListener)iterator.next();
listener.beforeResult(this,resultCode);
}
}
//nowexecutetheresult,ifweresupposedto
if(proxy.getExecuteResult()){
executeResult();
}
executed=true;
}
…
}
上面再来讲说Interceptor的完成布局,刚入手下手我觉得XWork1.x中Interceptor应当是从Filter中承继上去的,厥后看了源码,本来我的设法不合错误,想一想也切实其实是不必要,也不该该从Filter下承继,由于Filter就是Servlet2.3的一个API,而XWork1.x计划目标就是要离开ServletAPI,且Interceptor的完成并不是是少了Filter就不可,只是我们有了Filter将会来的加倍便利!
关于WebWork2.x中的一切的拦阻器,他们都有一个大众的接口Interceptor,在它傍边界说了拦阻器的一些基础操纵办法,然后有一个AroundInterceptor笼统类,完成了该接口,AroundInterceptor的感化是组合拦阻器的挪用按次,代码以下:
publicStringintercept(ActionInvocationinvocation)throwsException{
Stringresult=null;
before(invocation);//这里是用于组合挪用按次
result=invocation.invoke();
after(invocation,result);
returnresult;
}
至于将Map中的数据转换到我们的VO中,是经由过程ParametersInterceptor拦阻器来完成操纵的,这个拦阻器是一个真实的完成类,他从AroundInterceptor笼统类上面承继
publicclassParametersInterceptorextendsAroundInterceptor{
//~Methods////////////////////////////////////////////////////////////////
protectedvoidafter(ActionInvocationdispatcher,Stringresult)throwsException{
}
protectedvoidbefore(ActionInvocationinvocation)throwsException{
if(!(invocation.getAction()instanceofNoParameters)){
finalMapparameters=ActionContext.getContext().getParameters();
//用于猎取Map布局中的Parameters
if(log.isDebugEnabled()){
log.debug("Settingparams"+parameters);
}
ActionContextinvocationContext=invocation.getInvocationContext();
try{
invocationContext.put(InstantiatingNullHandler.CREATE_NULL_OBJECTS,Boolean.TRUE);
invocationContext.put(XWorkMethodAccessor.DENY_METHOD_EXECUTION,Boolean.TRUE);
invocationContext.put(XWorkConverter.REPORT_CONVERSION_ERRORS,Boolean.TRUE);
if(parameters!=null){
finalOgnlValueStackstack=ActionContext.getContext().getValueStack();
//用于猎取OgnlValueStack操纵,这个package没看过,详细听夏昕说是一套可读写对象属性的的类库,功效有些相似与JakartaCommonsBeanUtils,及SpringBeanWrapper
for(Iteratoriterator=parameters.entrySet().iterator();
//遍历Parameters中的信息
iterator.hasNext();){
Map.Entryentry=(Map.Entry)iterator.next();
Stringname=entry.getKey().toString();
//添补VO信息
if(acceptableName(name)){
Objectvalue=entry.getValue();
stack.setValue(name,value);
}
}
}
}finally{
invocationContext.put(InstantiatingNullHandler.CREATE_NULL_OBJECTS,Boolean.FALSE);
invocationContext.put(XWorkMethodAccessor.DENY_METHOD_EXECUTION,Boolean.FALSE);
invocationContext.put(XWorkConverter.REPORT_CONVERSION_ERRORS,Boolean.FALSE);
}
}
}
protectedbooleanacceptableName(Stringname){
if(name.indexOf(=)!=-1||name.indexOf(,)!=-1||name.indexOf(#)!=-1){
returnfalse;
}else{
returntrue;
}
}
}
有了这样一个呼声:让java代替C语言成为基本语言。这些足以说明java简单易学的这个优点。其次,java的功能强大,前面我也提到了,EJB3.0的推出使java成为了大型项目的首选。 |
|