WPTheme Java JavaScript…Yeah~!
May 23

  为了实现这个学校史无前例的页面,我开始走上一条无边无际的技术旅程。正是这个旅程,让我开阔了眼界,学习到更多的知识,得到了很好的锻炼。

(注:下面所写的JS等同与JavaScript,不论大小写,意义相同)

  在这里主要概要的回忆一当时下在技术方面的思考。

  一、Thinking In Java

Thinking in Java

  我们的服务器是java的,这方面还好,在程序编写方面,有一个让人快速上手的IDE:netBeans。

  当时没有项目规划这个概念,也不画什么UML流程图,只是简单的认为:兼容性和可扩充性很重要,讨厌写JSP,最好用tag,用Strut或JSF实现MVC。但因为某些原因,MVC框架用不了,连JSTL也不支持。我没有权力去改变这个现实,所以就只有将就现有运行环境,不用Struts了,EL语法也行不通,所以至今我还不熟悉Struts或在JSTL中使用EL。但我还会写Tag,没有EL语法的JSTL就不好玩了,所以自己写Tag。

  用不了的新技术还有很多,特别要求JDK6的就更加免提了。因为当时在学习阶段,只有学习最新最前沿的技术才有可能对以后的工作有帮助。我向一些网友提问怎么办,他们唯一的答案是”升级jdk和tomcat “,还热心的提供了一些简单的升级方法和经验。我很感谢他们,但权力和影响力这问题不是简简单单就能升级的。

struts

  但实际上也用不着那些东西,因为就是个拉数据,只要把底层的连接池和数据读取部分做好就行了。说到组件,那就是在连接池方面的Proxool和java Ajax方面的DWR了。Proxool更新得很慢,但口碑非常好,网友力荐,而且很早之前就准备好了的;DWR向下兼容很好,在服务器上稍稍配置一下就OK了。DWR好呀,在以后的Ajax应用是中杆力量。

  二、Ajax Frame

  在2006年6月,Ajax框架已经多得像满天的星星,Ajax之流行非比寻常。google、yahoo、微软等大公司也先后推出自己的Ajax框架。这里有一个Ajax Frame的列表

  Ajax框架存在的目的是为开发者提供高效率的开发。B/S开发还须顾及浏览器的兼容性,为此实现一个简单的行为可能要写上一大段代码,而且做测试也需要更多的条件。所以借助富有开发经验的公司或个人的已有成果十分有必要。

 选择什么框架呢?

  • 它必须能最大限度地兼容浏览器;
  • 方便地实现丰富的效果;
  • 自定制性强;
  • 有一定口碑。

在Ajax数据输送方面,我早就选定了DWR(请看”DWR,让Ajax如此简单”),所以下面要找的就是能满足UI需求的框架。当时满足要求的有下面几个:

  前三者都有丰富的UI。GWT把java写的代码转换成JS,让开发者只要懂java而不用懂JS。这样做的结果生成的JS晦涩难懂,前后台无法分开。我最无法忍受的就是要在自己的网上放一堆看不懂的代码,何况当时还传出这个框架有BUG呢。

  YUI和Dojo是被最有希望被选中的了,它们的UI最多,好评也很多。

  Dojo看上去很专业,而且Dojo里面的东西很多,但没有一个UI是我想要的,而且框架太庞大,不易学习;YUI很好,它提供的Pop窗口和拖动效果很炫,很适合要求。于是我用YUI做了一些Demo,做个试验。因此YUI是我研究得最多的Ajax框架了。

  YUI提供了一些接口,只要把自定义的行为提供上去,它就可以利用自己的事件驱动去实现你的行为。如一个pop的DIV浮动层,你可以定义它在鼠标点击时干些什么,鼠标拖动是干些什么,鼠标停止时又做些什么,只要你把这些过程事件堆给它就行了,置于怎样个弹出浮动DIV,你完全不用管。但这样做的缺点是可定制性差。你提供的行为只能像一条链似的逐个的执行下去,而这条链的基本行为是定死了的,接口再多也无法满足我的野蛮要求,除非修改它的内核代码,但我不会放弃我的要求!Byebye!

  说到酷效果,不得不提BackBase,这个也不用你懂JS,但有一套语言叫bxml的语言等你去学习 。论新意,它最特别,从不提起JavaScript这个词,但要你编写bxml,而非HTML。可是殊途同归,它最终也得用JS去解析这些xml,所以它不能得到我的青睐,更不能颠覆根基深厚xHtml。像这类在开发者和JS/HTML之间隔上层纱的Ajax框架都被我除名了。

  现在只剩下Prototype.js+scriptaculous了。

  Scriptaculous的效果很基础,基本是一个效果一个实现,如果想完成一系列行为,必须整合起来。它的代码里很少直接出现HTML,基本是算法,让你控制页面元素。因为页面的HTML结构与美工有关,最好的CSS技巧也离不开良好的HTML结构,所以我认为这种UI制作方式非常合理,自定制性非常强悍。为了实现DIV浮动,我又发现了prototype-window组件,同样基于Prototype.js。

  Prototype.js要求开发者有一定的JavaScript编写能力,正好可以学习一下。在当时,文档不是Prototype.js的强项,文档不像YUI那样丰富,官方没有提供Prototype.js的文档。但使用Prototype.js的人都喜欢将其代码看一遍,研究它的技巧,换个角度说,使用Prototype.js的人都是喜欢JS的人。所以网上所找到的文档都是网友的读源码心得。

  而Prototype.js能有像scriptaculous的组件,可见其可扩充性是如此之强,或者干脆的说,Prototype.js为我们提供两样东西:

  • 丰富、便捷而又具有高度浏览兼容性对HTML的操作的;
  • Ruby的效率为先的编程方法。

如果说YUI和Dojo都把JS当Java来写,那么Prototype.js就是把JS当Ruby来写了,而JS的灵活性真好被它发挥得淋漓尽致。

  现在的Prototype.js官方已经提供了丰富的文档。而我之前使用的还是一网友的prototype.js开发笔记,还把这个笔记做打包CHM文档供随时翻阅呢;另外还有一个国外网友制作的可以作为桌面图片的1.4.0的图片文档1.5.0的图片文档,不过我从未这样做,因为放在桌面上没有做成CHM阅读方便,但这也反映出Prototype.js的流行度和追捧度是如此之高了。

Demo
Demo:使用prototype-window组件把橙色方块中的蓝色移到浮动DIV中

点击一下,就可以改变DIV的内容

JavaScript模拟线程与线程锁


  三、DWR,让Ajax如此简单 

DWR

  Ajax的目的就是让数据传送的时候不出现页面刷新,所说的无刷新页面也就不过如此,DWR完全做到满足了要求。DWR有如下优点:

  • 易于学习,无须再学习大量的API。或者DWR提供了一系统对DHTML的操作,也可以用java编写函数来实现,其自带的JS也有很多有用的函数,但你可以完全不用他们,只要它的数据传送分部足已。
  • 数据与页面完全分离。DWR返回的数据干干净净,而且支持从java到JavaScript的转换,双向通信容易实现。无论是Java的一个ArrayList还是JavaScript的Array,都能够顺利转换,数据封装容易实现。
  • 安装容易。无须特定的IDE,因为它就是一个普通的jar,只要在需要的类中导入几个包,然后配置几个xml就可以了。这里和Strut、JSF等差不多,让你专心写好javaBean,但不用学习新API,所以就更简单。某些Ajax框架可能须要特定的插件你才可以方便地编写它,如GWT就有一个Eclipse插件。


  DWR很干脆,没有太多的UI组件,更专注于服务端开发,与前台分离,工作分配明细。DWR与Prototype.js及Prototype.js的系列延伸框架配合可谓是如虎添翼。

小结


  上面所写的关于选择Ajax框架的内容不太严谨。在选择Ajax 框架时,我们还应当考虑它的文件大小对用户的浏览影响、对团队合作的利弊、能否有效促进开发者的工作效率以及与现在条件资源的配合等。

respondLeave a Reply