为什么*模版语言

现在有很多模版语言,什么Velocity,JPublish等等等等,都可用于页面展示,但我觉得实在没必要用,JSP才是最强大最方便的。
为什么这么说呢?
JSP本身嵌入java代码,而java语法和功能大家都清楚,访问对象和属性不在话下;if跳转,for,while循环等一应俱全,更有强大的计算能力,完全能胜任复杂的页面逻辑。
而脱离java再搞一套所谓的模版语言实在没有必要,一则增加学习时间,跳转和循环,如何访问对象和属性都要重新学习,而用java脚本只要懂java便可;再则灵活性没有什么超越。
如果非要说多出了什么优点,可能模版语言减少了代码量吧,但我认为减少代码量的目的是减少重复代码量,而不是什么减少文件大小。

偶是专门做页面的, 偶可不看懂那么恶心的java代码, 想让偶学习它就头大了, 还想让偶在html里面签入一堆这样恶心的代码? 哼哼.

velocity, freemarker偶都用的, 而且只花了2个小时就学完了, 实际应用中遇到问题的时候就翻一下只有几页的语法手册, 比学个java要花1个星期, 查个javadoc要n页方便多了.
回到你的问题:
if(CommonConstants.YES.equals(board.getString("canUpload"))||user.isRoot()
为什么后台程序员不在board对象里面写上一个封装好的canUpload()的方法呢?
canUpload()  {
  return CommonConstants.YES.equals(this.getString("canUpload")) || RemoteUser.get().isRoot();
}
而非要页面编写者做一堆代码呢? 而且这些代码还会分散在各处, 想起来就恶心呀...

既然你用ofbiz开发过论坛, 你应该知道ofbiz在2.1版本以后, 从原来的jsp转到了模板语言 (jpublish/freemarker), 原因么? 你可以去搜索一下mail list, 或者发信问问看David or Andy.
这些都是好几年的事情了, 还在这里讨论jsp的优缺点, 以及比较jsp和template language实在是有些无聊.

jpublish并不是一个模板语言, 它只是一个粘合剂, 它使用脚本(如javascript, beanshell等)做模板数据的准备, 然后再使用velocity或者freemarker这些模板语言做渲染. 所以说, 先了解了再批判.
谈到学习成本, velocity和freemarker都是被广泛支持的模板语言, 现在如果哪个web mvc framework还不支持他们其中的一个, 那就不要出来混了. (webwork, spring mvc, struts), 学了其中的一个就够用了, 偶们会举一反三嘛......

JSP的问题不是功能不强,而是功能太强,以至于不能限制你在页面干任何事情。
正如readonly所说的,模板的好处是让你不能天马行空的插入一大坨java代码。
为什么这么说呢?因为这样会将业务逻辑与显示逻辑混在一起。
这样以后维护的时候会有巨大的麻烦。
各种层出不穷的框架不就是为了保证我们开发的速度快,代码逻辑清晰,易于维护吗?
另外,确实如上面说的,既然不了解,就不要随意批判,会误导其他不了解的人的。
你可以多宣传自己比较了解的东西的看法。

To goldrain:
http://forum.javaeye.com/viewtopic.php?t=8212
http://forum.javaeye.com/viewtopic.php?t=7414
http://forum.javaeye.com/viewtopic.php?t=4319
JSP scriptlet 的原罪在于他是强类型,低附加功能的脚本语言,而不是弱类型,高附加功能,只要按照你这种方式,同时用JSP和PHP写同样一个Web application,JSP的弱点就会暴露无余。
JSP tag的原罪在于他的语法企图模仿XML,但是无比的拙劣和死板。
模板语言则同时克服上述两种缺点,但是我也相信你短期之内无法领会模板语言的优势,因为模板语言必须搭配像Webwork这样灵活强大方便的MVC框架,才能充分发挥它的优势。

JAVA的VIEW层描述语言从jsp到摸板语言的转变 整个就是让程序员从"不能有话好好说"到"不会有话好好说"的过程 都是陷入了一种两难境地
模板引擎的设计最早是来自于 webmacro 我在使用PHP做B/S结构的软件时比较多的接触了 模板功能用比,PHP本身做为弱类型语言在在开发
VIEW层时容易做出大堆大堆的PHP+HTML的页面 模板的引入使得HTML页面清爽了许多,程序员们想当然的认为这样一来在HTML没有了那些该死的
php标签影响美工,可这只是一相情愿罢了。在美工看来这些乱七八糟的{$name} {#while} <--while--> 比以前还糟:"从前我还能分清哪块是
程序代码,现在这些新出来的标签让我头晕"--美工如是说。
在这些模板中 if ,while, for 之类的东西一个都没少,只是换了个样子出来罢了。要完成稍复杂的页面逻辑,模板语言必然面对IF,WHILE 之
类的流程控制语句,模板中不断加入新功能,包含外部文件、使用外部对象、函数什么的简直成了另一种程序语言。smarty模板就是这方面的
代表
至少就我所知道的聪明点的PHP的程序员 无论是大的网站还是B/S的软件都不在使用模板了,当然更不能退回到PHP+HTML的时代,他们用自己的
所谓UI框架+php代码。
说了这些PHP那边的事,
再说JAVA这边
JSP的被否定是自然的从其它语言转过来的开发人员对这个是很敏感 jsp+html比php+html 更让人恶心,
JAVA里也有模板而且好像功能更强,当然在PHP里的模板问题都在JAVA WEB开发中都出现了
"模板语言+html" 相比"JSP+HTML"除了分离控制逻辑和显示逻辑之类的好处外 相对JSP来说明显的好处有: 只提供比较基本的流程控制功能、
可以控制对象的访问、可以被一些MVC框架支持等等吧
实质问题是这样的:无论是模板语言还是JSP都试图用传统的控制流程语句去描述日益复杂的"页面流"
都是基于IF ,ELSE ,iterator的。当页面越来越复杂、控制流程也相应增加。而且比较多的需求修改其实是显示格局(逻辑)的变化比如三列变
四列,行显示变列显示之类的,或许你可以把这些都做相应的类抽象出来,但也只是救一时之需
我想说的是JAVA世界中模板的引入是换汤不换药的,使用它可能会提高你的生产力,但那很有可能是因为其它的原因。
我想现阶段在VIEW层 如果你的手下更熟悉JSP,你完全可以制定出严格的JSP的使用规则比如只使用基本的if,else,while 不要用new AClass()
只用<jsp:useBean>  JSP里只有VO 什么的  如果最后形成的页面仍然混乱不堪,至少还有重构这个稻草吧,把那些IF,ELSE 放到相应的VO里
或许有好的WEB UI framework 才是减轻页面开发的途径 (像dotnet 或者 像DLEE的团队)

人们认为 servlet 中 print HTML 太麻烦了,于是 jsp 出现了;
人们又认为 jsp 中的 scriptlet 太强大,容易混乱,于是模板出现了;
人们又认为模板功能太弱了,于是模板有了脚本语言、控制逻辑...;
......
我们到底想要什么?!

phpbb, fastm, jdynamite, jivan, xmlc, wicket(?) 等,都没有逻辑控制语句、外部文件包含、外部对象,这些东西。
velocity, freemarker等一开始出现的时候,就是 脚本,就是语法树。而不是后来加的。
phpbb, fastm, jdynamite, jivan, xmlc, wicket(?) 等,一开始出现的时候,就不是脚本,只是结构树。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值