关于作者

笔名:buaawhl
地区:
作者相册

日历 

快速登录

+ 用户名:
+ 密 码:

在线留言

友情Blog

访问统计:3954


buaawhl

 

http://www-900.ibm.com/developerWorks/cn/java/l-aspectJ/
普通程序员。 Powered by Open Source。致力于做一个Architect,Solution Provider,Best Practice Provider。 希望有一天,有足够的时间,精力和能力的时候,将把自己有限的一身所学的一点东西全部贡献给Open Source Project。

日志

Revolutionary Template Tech -- fastm
摘要:The formula of fastm is very simple and straight-forward: Template DOM + Object DOM = Result HTML 查看全文

- 作者: buaawhl 2005年05月30日, 星期一 19:50  回复(4) |  引用(0)

Java Web开发构想(3)
摘要:我理想中的Web开发架构是这样的: 开发速度快,运行速度快,结构清晰优雅。 具体到每一层。 Web框架层主要追求 开发速度快。 O/R层主要追求 运行速度快。 页面资源层和页面模板层主要追求 结构清晰优雅。 查看全文

- 作者: buaawhl 2005年05月30日, 星期一 19:41  回复(0) |  引用(0)

Java Web开发构想(2)
摘要:我理想中的Web开发架构是这样的: 开发速度快,运行速度快,结构清晰优雅。 具体到每一层。 Web框架层主要追求 开发速度快。 O/R层主要追求 运行速度快。 页面资源层和页面模板层主要追求 结构清晰优雅。 查看全文

- 作者: buaawhl 2005年05月30日, 星期一 19:39  回复(0) |  引用(0)

Java Web开发构想(1)
摘要:我理想中的Web开发架构是这样的: 开发速度快,运行速度快,结构清晰优雅。 具体到每一层。 Web框架层主要追求 开发速度快。 O/R层主要追求 运行速度快。 页面资源层和页面模板层主要追求 结构清晰优雅。 查看全文

- 作者: buaawhl 2005年05月30日, 星期一 19:34  回复(0) |  引用(0)

fastm 1.0 Milestone 发布
摘要:fastm 1.0 Milestone 发布 查看全文

- 作者: buaawhl 2005年05月29日, 星期日 12:38  回复(4) |  引用(0)

Evolve 进化

Evolve 进化

1.基因

亿万年的基因进化历程,证明了一个真理,稳定者生存。

太活跃的基因往往活不过几个小时。

基因突变的发生几率很低,突变基因的存活率更低。

但正是这种“不安分因素”促成了物种的进化。

基因突变的进化结果,经过几万年,几亿年的时间,才能够显示出来。

2.文明

人类的进化路线有两条,一条是生物学方面的进化,一条是文化(文明)的进化。

生物学方面的进化表现在脑容量的增大,身高的增长,等等。这个过程缓慢而漫长。

 

文化文明的进化速度呈现一种几何级数的增长。几十万年的原始社会,几万年的奴隶社会,

几千年的封建社会,几百年的资本主义社会/社会主义社会。自然经济时代,工业时代,后工业时代,信息时代。

3.科幻 1

地球人类的一艘宇宙飞船,进行星际旅行考察。

一天,飞船到达一个巨大的星球,上面生存着体积庞大如山峰的生物。它们摧毁巨大的宇宙飞船,就象拍死一只蚊子一样。

它们缓慢地移动着,引起星球表面的震动,山峰被踏平,深谷被添满。驾驶员小心翼翼地躲开这些生物,但一只巨大的生物还是看到了飞船,张开巨口咬了下来。

人们发现自己的飞船笼罩在巨口的阴影中,连忙外逃,跌跌撞撞,终于飞离了巨大生物的攻击范围。过了好久,听到后面一声巨响,一看,原来是怪物的巨口终于咬合了起来。

人们恍然大悟,原来这个星球上的生物遵守的时钟比人类慢很多。

如果这些巨大生物到达地球,现在的人类无力对抗这些具有造山力量的生物。经过一番讨论,人们一致认为,这些生物并不会对地球人类造成威胁,按照它们的进化速度,地球灭亡的那一天,它们还不会使用简单的工具。

 

飞船离开了这个缓慢的星球,继续旅行,目睹了一个新星球的诞生。

这个星球很小,如同一个陨石一般大。出于好奇,人们把这个小星球引入了船舱的一个实验室,用高度显微镜进行研究。

人们惊异地发现,这个星球上有生命。大量微小的生物在星球上繁衍着。人们亲眼看到这些微小的生物在几个小时之内,进入到刀耕火种时代,如同观看电子游戏《文明》。

又过了不到一个小时,人们看到这些小东西在制造精密仪器了。人们开始惶惶不安起来,终于做出决定,摧毁这个星球。因为人类的进化速度永远赶不上它们,如果它们与人类为敌,很快就会灭亡人类,就象人类灭亡其它物种一样。

4.科幻 2

公元2100年的一天,地球上一艘飞船出发,为人类寻找适合居住的星球。

据估测,最近的适合居住的星球,在400光年之外。

当时飞船的速度只达到光速,为了完成任务,需要飞船上一代代人的努力。

飞船装载了上千人和大量的生活资料,宛如一个小型社会。地球上的人们向这些勇敢的拓荒者告别,飞船出发了。

飞船上的人们从来没有忘记自己的使命,他们一代一代告诫自己的子孙,他们的使命关系人类的未来。他们途中几次偏离航向,历尽艰险。但最终,几百年后,飞船到达了目的地。

飞船上的人们惊异地看到,这个星球上的文明已经高度发达,而上面居住的正是自己的同类??人类。

星球上的人们友好地欢迎飞船来客。讲述了来龙去脉。原来,在飞船出发后的100年,人类又制造出了更快速度的飞船,几个月时间,就能够到达400光年之外的星球。第二批拓荒者几百年前,就在这里建立了人类的居住地。

5.系统 1

宇宙中的事物都有一种自组织特性??从低级到高级,从无序到有序。

我们可以观察蚂蚁社会的特性。单个蚂蚁的行为没有任何规律可言;一群蚂蚁的行为目的很明确;一个巨大的蚂蚁群体,呈现出的惊人智力,甚至不低于普通的哺乳动物的智力。

影响进化速度的因素,不仅在于时钟周期,更在于群体中的个体数量。

前面的科幻故事里面,飞船上的1000个人的群体的进化速度,永远赶不上地球上的几十亿人的群体的进化速度。

6.系统 2

人们用热水器洗澡的时候,经常遇到温度调节的问题,不是过热,就是过冷。

热水器是一个典型的“迟滞”系统??系统接收到输入因素的变化后,需要经过一段时间的内部调整,才能够达到最终的稳定的状态。

人们根据热水器的输出,不断调整热水器的输入,最终达到一个合适的温度。电子电路学里面讲过,这叫做“负反馈”系统??根据系统的输出进行相应调整,抵消系统的输入带来的影响,系统的振荡幅度越来越小,最后趋于0

前面讲过,稳定者生存。自然界中,和社会中的大部分系统都是“负反馈”系统。因为“负反馈”系统最终能够达到一个稳定平衡的状态;而“正反馈”系统的振荡幅度会越来越大,最终愈演愈烈,无法控制,最终摧毁系统自身。“正反馈”系统的例子,如爆炸,核裂/聚变。

过犹不及,就是这个道理。

人类社会是一个“时滞”很长的系统??通常,一项政策的实施结果,要在几年,十几年,甚至几十年之后,才能够看到全部的结果。短期效应和长期效应经常是相反的,很多短视的只求眼前利益的行为,所造成的危害,几代人都无法弥补。

一个系统的进化速度,很关键的因素是调整规则的优劣。调整规则的优化,需要系统的整体协调连通,需要系统中所有个体的努力。

影响进化速度的因素,不仅在于时钟周期,和群体中的个体数量,更在于群体中的个体质量。

(关于系统论,请参见《第五项修炼》)

7.社会

毛主席讲过,人民,只有人民,才是创造历史的真正动力。

但常识告诉我们,历史只记载杰出人物,影响历史的通常都是个人,或者是个别集团。

如果要认同这种人民历史观,只能这样理解:

杰出人物来自人民;人民提供了培养杰出人物的土壤;人民为杰出人物提供了表演的舞台。

不管怎样,一个系统的质量,还是要看这个系统产生杰出个体的能力。

8.社会&自然界

王侯将相,宁有种乎?

是有种的。内心的火种??雄心和野心。

冰与火从来是永恒的主题。

冰是整齐的结晶体,代表着秩序,严谨,静态,稳定;火一刻不停地跳动着,燃烧着周围的物质,散发着逼人的热量,代表着浪漫,活跃,不稳定,具有毁灭性。

自然界和社会都是处于冰与火两极之间的一种奇妙的平衡中。稳定是生存的前提;活跃是发展的前提。

看一看金属的导电过程。金属导电的原因是由于内部处于游离态的自由电子。自由电子的数目越多,导电能力越强。但是,如果金属中的自由电子过多,金属本身就无法存在了。连导电的导体都没了。

9.互联网

互联网把全世界的人们联接起来,把人们带入了一个群策群力的时代。知识的演化速度空前提高。以前很久才能完成的事情,现在似乎一夜之间就能完成??当你在休息的时候,互联网上还是有很多人,互联网永不休息。

互联网只是起着交流渠道的作用。真正发挥作用的还是人类社会系统的所有个体??人。

脑神经学里面讲到,人的智力,主要由以下因素决定:脑的神经突触的数目,和神经突触之间的连接渠道的粗细和数目。神经突触越多,人越聪明;神经突触之间的连接渠道越粗,人越聪明;神经突触之间的连接渠道越多,人越聪明。

互联网拓宽了人们的交流渠道,就等于打开了人类社会系统的智慧之门。

要想富,先修路。就是这个道理。

10.企业

Intel前总裁葛洛夫写了一本书??《只有偏执狂才能生存》,意思是告诫企业不要抗拒变化,不要害怕变化,要拥抱变化,要利用变化。

更有甚者,一个著名的大企业总裁说,“我们的企业哲学是,射击,然后瞄准。”生怕落于人后,失去先机。

创新精神,(至少在口头上)获得了前所未有的地位。

企业就在创新求变和稳定发展的两极之间,努力保持着平衡,跌跌撞撞地完成进化。

11.人生 1

Oracle总裁埃里森在哈佛做过一次演讲。

埃里森对着这些自命不凡的哈佛学子,夸夸其谈:

在大多数人眼里,你们都是精英,天之骄子。在我,埃里森看来,你们都是失败者(Loser)。

比尔.盖茨没有读完大学,现在成为首富。我被赶出大学校园,现在也排在财富榜的前列。还有戴尔。这样的例子太多了。

不过你们也不用灰心。经过这么多年在名校的学习,你们终于获得了为我们(比尔.盖茨,埃里森,戴尔)工作的机会和资格。

经常有这样的情况:

几十年后,当年的同学们相聚。经过一番交流,会发现,当年学习不怎么好的同学,很多当了老板,学习不错的同学,都在为这些老板工作。

高起点往往会销蚀人的斗志。进化的结果不全由个体的位置决定,更重要的是,由个体的态度(态势)决定。

(这里并不提倡那些暗箱操作的手段,提倡的是一种企业家精神。)

12.人生 2

某地有两位青年教师,一位只会讲本地方言,不妨称为L(local);一位只会讲标准的普通话,不妨称为G(global)

该地的一位领导喜欢讲家乡话,选中了L作助理。G还是在学校教书。

几十年过后。

G在学校里教了几十年书,口音早就被同化,讲得一口本地方言,普通话是一句也不会了。

L跟着领导走南闯北。本地方言没有忘,更学会了各地方言。说的最好的,就是一口流利的普通话。

13.人生 3

某重点高中的两个水平差不多的学生分别考入了重点高校和普通高校。

重点高校的竞争气氛很浓,大环境很好,考入重点高校的学生勤奋地成长着。

考入普通高校的这个学生,运气出奇的好,刚一到学校,就受到老师和同学的器重。

还参加了教研室的重点项目,并被推荐参加各级活动。这个学生被赋予更多的责任和荣誉,学业有了提高,视野空间也有了很大成长。

进化的因素还包括大环境和小环境。这里说的是一种“资源倾斜”的问题。

 

- 作者: buaawhl 2004年10月5日, 星期二 15:05  回复(8) |  引用(0)

变革性的Java Web模板技术 -- fastm

变革性的Java Web模板技术 -- fastm

1.“简单就是美”空想(响)曲

 

在软件设计领域中,有一句脍炙人口的至理名言??简单即美好。

几乎所有的软件设计大师,都会在其著作中训导读者:

“简单即美好”,

Keep it simple, Stupid”,

Less is more”,

…..

 

这是一条耳闻能详,人人都会说的至理名言。

但实际上,这也是一条被违背得最广泛、最彻底的至理名言。

“简单就是美”这个真理就好像天堂一样,人人都说天堂美好,但人人都拼命拖延到达天堂的时间。

 

从总体趋势来讲,软件开发技术总是变得越来越复杂,越来越庞大。

我们来看Java Web表现层技术的发展历史。

1)首先,Servlet诞生了。Web程序员们很高兴,觉得用起来比CGI爽多了。

2)过了一段时间,人们就觉得在Java程序里面写HTML太不爽了。毕竟,在HTML中,静态的文本标签占大部分,动态显示部分只是小部分。不如在HTML里面写Java代码。于是,JSP诞生了。成为了ASP的一个有力竞争对手。

3)过了一段时间,人们又觉得HTMLJava代码混杂在一起,不仅页面结构很差,而且其中的Java代码也很难维护。这就是著名的“Java Code Pollution”问题。不如用自定义的XML元素替换Java代码,这样,整个页面就XML化了。于是,TagLib就出现了。

4)可还是有一个问题,TagLib不能在一般的HTML浏览器或编辑器里面显示,页面不能所见即所得。而ASP.netVisual Studio快速可视开发之优势,正在Web开发领域攻城掠地。Java世界仓促应战,启动JSF项目。成员众多的Web Framework阵营中又多出一位权威的重量级选手。

 

各种新概念层出不穷,页面流程越来越复杂。

据说这是为了降低开发难度,让程序员只关注于业务逻辑,而不用关心底层的技术细节;据说这是为了企业级应用,而企业级应用的需求是复杂的,所以,把简单问题复杂化是有道理的??据说,这是为了系统的面向未来的可扩展性、可伸缩性….

 

这是个神话广为流传的年代,这是个概念批量制造的年代。

 

深度思索一番,我想,技术的复杂化趋势,也许是技术市场的商业内需所致?

 

新技术出现的驱动力一般有两种:

1)第一种驱动力是为了解决真正的问题。

比如,Servlet的出现,是为了解决CGI的空间时间消耗问题。较CGI而言,Servlet是一种新思路,一种替代技术。

第一种驱动力来带来的新技术的产生周期比较长,不足以维持人们对技术的需求。

 

2)第二种驱动力是为了弥补前一个技术的不足。

复杂的技术总有一些不足之处,于是为下一次技术革新创造了内需。而且,技术越复杂,不足之处就越多,技术“创新”(或者叫“修补”更合适?)的内需和商机就越大,形成一条自产自销的技术“修补”产业链。

比如,JSP的出现是为了辅助生成Servlet;而TagLib的出现则是为了弥补JSP的不足;TagLib可视化插件则是为了弥补TagLib的不足。商机无限,涌现出一大批提供各种TagLibTagLib可视插件的技术厂商,技术市场一片繁荣。

这第二种驱动力带来的新技术的产生周期比较短,而且子子孙孙无穷匮也,绝无断炊之虞。

 

但我坚信,技术总有一天要返朴归真。

总有一天,我们会回到真正解决问题的道路上来,而不是继续一条技术“修修补补”之路。

2fastm的诞生??“简单就是美”王者归来

Java世界是一个开放的世界。我想,正是因为这一点,广大的Java程序员才舍不得离开这个Java开发阵营。

java.sun.com公布了所有的java技术规范。

apache.org开源社区吸引了大量的程序员加入Java开发阵营。

sourceforge.net为更广大的程序员(不仅是Java)提供了交流、共享和发展的空间。

 

正是因为这样的开放性,促进了Java开发技术的空前发展。

也正是因为这样的开放性,形成了Java Web表现层技术群雄逐鹿的局面。

Java Web表现层技术领域,JSP+TagLib页面技术是权威,是规范,但这个领域也不排斥其它的技术。

如上所述,JSP+TagLib并不是完美的技术,所以具有不断改进发展的内在需求。

同时,这一点也促使人们不断探索、比较其它的技术可能性。

 

Web表现层之下的所有层次??O/R层、业务层、Web Framework等都直接由Java代码实现,都能够很好的结构化,对象化,不存在任何问题。唯独Web表现层,天生结构松散,野性难驯。

我是一个Java Webapp程序员,一直执著地努力把Web表现层做得具有同样的结构化,对象化。两三年来,我应用、研究、比较了多种Web表现层技术:

 

1Velocity http://jakarta.apache.org/velocity/  (and WebMacro, FreeMarker.. etc)

2Tapestry http://jakarta.apache.org/tapestry/

3Echo http://sourceforge.net/projects/echo

4Cocoon (XML + XSLT) http://cocoon.apache.org/

5XMLCStatic DOM  http://xmlc.enhydra.org/

6NekoHTML (Dynamic DOM) http://www.apache.org/~andyc/neko/doc/html/

7JDynamiTePHP Template Porthttps://sourceforge.net/projects/jdynamite

 

通过研究比较,我发现了模板技术中的“万恶之源”??模板里包含的逻辑代码(if, else, for, 赋值, 操作, 调用等)。

这些包含在模板里的逻辑代码,是“所见即所得”开发的天敌,也是毁坏重用性的罪魁祸首。

 

JSP + TagLibVelocityTapestryXSLT等都是含有逻辑的模板。如果没有特殊的插件,这些模板都无法正确在普通的HTML浏览器或编辑器正确显示。

而且,混杂在HTML中的逻辑是没有办法重用的;你无法把这些逻辑分离出来为通用的方法或类。

 

JDynamiTe是一个把PHP模板技术移植到Java的一个开源项目。JDynamiTe模板用注释(BEGIN-END)标记动态块,用{}标记占位变量。JDynamiTe模板不包含任何逻辑,是“所见即所得”的模板技术,能够在普通的HTML浏览器或编辑器正确显示。

XMLCDOM模板技术直接使用HTML文件作为模板,当然也是“所见即所得”的模板技术。

JDynamiTeXMLC的共同点是,模板中不含有任何逻辑,所有的模板处理逻辑(检查判断、节点拼装、变量替换等)全在代码中完成。

 

这两种技术虽然把逻辑从模板定义中分离了出去,但用法上却没有把逻辑和数据从模板中彻底地分离出去。

我们来看XMLC技术中的HTML DOM的用法。一份HTML DOM刚生成的时候,还是一个纯洁的模板。但随后,程序就直接改动HTML DOM的节点数据,甚至改变节点的位置和数量,这份HTML DOM再也不能当作一个纯洁的模板重用了,更别说在多线程的环境中被多个线程同时使用了。想想看,在一个静态文本占绝大部分的DOM结构里,这种做法将造成多么大的空间和时间上的浪费。

JDynamiTe的用法具有和XMLC同样的性能问题。

 

我冥思苦想如何解决这种性能上的缺陷,最后,在JDynamiTePHPDOM的思路的基础上,我创造了Template DOMValueSet DOM的概念,从用法上,进一步把数据和逻辑从模板中彻底地分离出去。于是,fastm开源项目诞生了。

3.小、快、简、易、强的“银弹”? fastm

fastm具有其它页面生成技术不可比拟的优越性:

所见即所得,易学易用,开发速度快,运行空间小,运行速度快,模板与数据的彻底分离,模板与数据的多对多自由匹配。

fastm从各方面来说,是最好的模板技术??最快,最小,最易用,最灵活强大(和纯Servlet/JSP一样灵活强大)。我期望fastm这种页面生成方式,能够较好地解决Web页面生成问题,能够在全世界的Java Web程序员中流行起来。

 

上面这段话是否只是不自量力的自卖自夸?

这点很容易辨别:fastm是完全开放的一个开源项目,一试便知。由于fastm的思路、实现和用法简单易懂,这一试也花不了什么时间。

 

fastm真正地证明了“简单即美好”。下面我具体讲解一下fastm的思路和用法。

3.1  fastm模板是轻量级的DOM

 

PHP模板一样,fastm模板只包含三种元素:

1)静态文本。

2)占位变量。用{}标志。

3)动态块。用BEGIN-END DYNAMIC标志。

 

其中,动态块可以包含其它的元素??子动态块,占位变量,静态文本。所以,fastm模板是一个树型结构,相当于一个轻量级的DOM结构。后面我们就称这个结构为Template DOM

 

下面举个简单的例子。比如下面的HTML片断。

<select name=”zipcode”>

            <!-- BEGIN DYNAMIC: zipcodes -->

            <option value=”{zipcode}”>{zipcode}</option>

            <!-- END DYNAMIC: zipcodes -->

</select>

 

这个片断包含一个BEGIN-END块(zipcodes),这个块里包含两个相同的变量{state},其它的部分都是静态文本。

 

这个片断的fastm Template DOM结构如下:

 

静态文本  <select name=”zipcode”>

动态块zipcodes --

                             | --- 静态文本  <option value=”

                             | --- 变量{zipcode}

                             | --- 静态文本  ”>

                             | --- 变量{zipcode}

                             | ---静态文本 </option>

静态文本  </select>

 

看起来,fastmTemplate DOM也没有什么特殊的。

Template DOM具有一个至关重要的特性??只读,不可改变。

既然只读,那么当然线程安全,同一份Template DOM能够同时被多个线程并发使用。

 

那么我们如何从只读的Template DOM得到动态页面呢?我们必须把动态数据装载到一个ValueSet DOM结构(也是一个树型结构)中,然后用这个ValueSet DOM匹配Template DOM,生成动态结果。

3.2 Template DOM + ValueSet DOM = Dynamic Result

Template DOM包含三种元素节点:静态文本节点、变量赋值节点、动态块节点。

由于静态文本节点不需要赋值,ValueSet DOM只包含两种元素节点??变量赋值节点,和动态块赋值节点。其中,动态块赋值节点可以包含子动态块赋值节点和变量赋值节点。所以,ValueSet DOM是和Template DOM动态部分对应的一个树型结构。

 

Template DOMValueSet DOM之间的节点对应关系如下:

Template DOM的变量节点和ValueSet DOM的变量赋值节点之间是一对一的关系。而Template DOM的动态块节点和ValueSet DOM的动态块赋值节点之间是一对多的关系,这是为了让动态块能够在页面中多次显示。

 

我们来为上面的Template DOM结构(zipcode Select)构造一个ValueSet DOM

 

String[] zipcodes = {“361005”, “100008”};

 

IValueSet top = new ValueSet(); // 对应上面的整个HTML片断

List items = new ArrayList(); // 对应 动态部分zipcodes

for(int i = 0; i < zipcodes.length; i++){

            IValueSet item = new ValueSet();

            item.setVariable(“{zipcode}”,  zipcodes[i]);

            items.add(item);

}

 

top.setDynamicValueSets(“zipcodes”, items);

 

我们把top这个ValueSet DOMTemplate DOM结合起来。就生成如下结果。

 

<select name=”zipcode”>

            <option value=”361005”>361005</option>

            <option value=”10008”>100008</option>

</select>

 

一份Template DOM可以匹配多个ValueSet DOM。同样,一个ValueSet DOM也可以匹配Template DOM,把相同的数据显示在不同风格的模板中。

 

比如,我们还有这样一个HTML片断:

<table>

            <!-- BEGIN DYNAMIC: zipcodes -->

            <tr><td>{zipcode}</td></tr>

            <!-- END DYNAMIC: zipcodes -->

</table>

 

我们把上面的top ValueSet赋给这个模板。得到的结果如下。

 

<table>

            <tr><td>361005</td></tr>

            <tr><td>100008</td></tr>

</table>

 

我们可以看到,Template DOM就是模板,只包含显示风格和分块定义。ValueSet DOM就是数据,只包含数据。

 

ValueSet DOMTemplate DOM的分开,是一个极大的思路上的创新和飞跃。

毕竟,页面中的动态部分,和静态比起来,是非常小的一部分。ValueSet DOM代表动态部分,由程序随时生成,可以存在多份。Template DOM代表静态部分,只需要解析一次,而且只需要一份。

 

ValueSet DOMTemplate DOM的分开,更是一种前所未有的彻底的显示和数据的分离。比XML/XSLT的方法更加彻底。XML确实是纯粹的数据,但XSLT中却不可避免的要包含逻辑。ValueSet DOM是纯粹的数据,没有任何逻辑,Template DOM是纯粹的显示模板,也没有任何逻辑。

 

由于数据结构是DOM结构, fastm实现TilePortal等功能,可以说是Super Easy。你绝没有必要把页面组装逻辑别别扭扭地写在一堆复杂的TagLib里面,你可以大大方方地把页面组装逻辑写在一个很小的公用方法里面。

3.3 fastm资源列表

http://sourceforge.net/projects/fastm

用户可以从这个地址下载fastmfastmweb的源代码文件、使用文档。

其中的fastmwebfastm的辅助项目fastmweb,帮助定义装载Web环境中的fastm模板。同Velocity一样,用户可以在任何web framework中使用fastm模板技术。

 

http://sourceforge.net/projects/lightweb

lightwebfastm作者开发的一个轻量级的Web Framework

其演示程序demo-fastlight演示了如何在lightweb框架中使用fastm,并和jsp程序进行了比较。下载解开之后,可以直接在Web Server(如Tomcat)中运行。

4.技术展望 ?? 挽救B/S Webapp

我确信,fastm一定会作为一种模板开发标准流行起来。

当然,其间必定会遭遇习惯和成见的巨大阻力,毕竟,fastm的作者只是一个名不见经传的无名之辈。但fastm终会胜出,只是时间早晚而已。

一旦fastm的知名度超过某个阀值,fastm必将以星火燎原之势攻城掠地,争夺所有“复杂”模板技术的用户。

 

短期来看,fastm消灭了复杂,就等于消灭了大量的商机。fastm本身又如此简单,提供不了足够的新的商机;技术作家连写《fastm in Action》的机会都没有,因为fastm的定义和用法都太简单了;而且fastm极大地降低了Java Webapp的技术门槛,是否会令Java Web程序员贬值?fastm Java 开发阵营有什么好处?

 

长期来看,fastm能够帮助Java开发阵营夺回ASP.netWeb开发领域夺走的领地,改变两大阵营的力量对比。

fastm足以与Visual Studio.netASP)相较,甚至更胜一筹。

fastm模板不需要任何特殊的支持,就能够在普通浏览器中“所见即所得”;ASP模板必须在Visual Studio.net中才能正确显示(而且是以form的形式显示)。

fastm模板比ASP模板简单多了。从用法来说,甚至比其源头PHP模板还要简单。使用fastm,大量的PHP程序员可以直接转到Java Web开发阵营,而不用学习那些庞杂复杂的新模板技术。

JSR-223是一个JavaPHP等脚本语言(还有PerlPythonRubyTcl)等互操作的JSRhttp://www.jcp.org/en/jsr/detail?id=223 目前正处于初稿审定阶段。

这从另一个方面说明,fastm生逢其时,直接为Java