不帅 发表于 2015-1-18 11:48:46

JAVA网页设计WebWork2源码剖析续一

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成为了大型项目的首选。

冷月葬花魂 发表于 2015-1-21 15:22:12

科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。

再见西城 发表于 2015-1-30 20:25:11

你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。

因胸联盟 发表于 2015-1-31 16:59:43

不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。

海妖 发表于 2015-2-1 19:14:44

所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。

admin 发表于 2015-2-5 22:01:40

至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。

小女巫 发表于 2015-2-5 22:01:55

那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!

灵魂腐蚀 发表于 2015-2-13 19:33:39

是一种为 Internet发展的计算机语言

若相依 发表于 2015-2-17 20:00:31

http://www.jdon.com/去下载,或到同济技术论坛的服务器ftp://nro.shtdu.edu.cn去下,安装上有什么问题,可以到论坛上去提问。

蒙在股里 发表于 2015-3-8 18:17:04

当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?

透明 发表于 2015-3-11 02:05:31

还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。

兰色精灵 发表于 2015-3-13 00:07:23

那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!

分手快乐 发表于 2015-3-17 19:10:56

所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。

若天明 发表于 2015-3-19 17:14:40

一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。

莫相离 发表于 2015-3-24 15:42:00

那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!

愤怒的大鸟 发表于 2015-3-24 17:25:54

是一种将安全性(Security)列为第一优先考虑的语言

活着的死人 发表于 2015-3-27 10:08:49

关于设计模式的资料,还是向大家推荐banq的网站 http://www.jdon.com/,他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。

谁可相欹 发表于 2015-3-27 16:10:27

Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台

精灵巫婆 发表于 2015-4-3 21:48:37

有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)

变相怪杰 发表于 2015-4-7 19:01:57

关于设计模式的资料,还是向大家推荐banq的网站 http://www.jdon.com/,他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
页: [1]
查看完整版本: JAVA网页设计WebWork2源码剖析续一