论坛首页 AJAX版 UI

炮打Taglib,我的一张大字报!

浏览 17027 次
该帖已经被评为精华帖
作者 正文
时间:2004-04-10
Tapestry会成为Web开发主流框架吗 一贴中,我谈到了taglib的开发问题,但是我觉得是否采用taglib本身就是一个非常值得探讨的问题,因此另开一个Thread,专门讨论taglib的问题。

我认为JSP里面使用Tag,就是一个错误!我反对在JSP里面使用Tag,我推荐大家在JSP里面写Java代码,没错,就是在JSP里面写Java代码,我就是一直这么干!

很多人可能要跳起来批评我的反动了,我承认我的观点是让太多人不可思议,仿佛是历史潮流的倒退。但是我请大家想想看,JSP本质上是什么东西?

JSP是嵌入式脚本,是服务器端页面编程语言,没错,就是脚本语言,是页面编程,就是要你嵌入代码的。JSP为什么要出现,PHP为什么要出现,就是因为在页面里面嵌入代码很方便,开发方便,调试方便,连美工做页面都方便。

为什么PHP这么流行?就是因为在页面里面嵌入代码简单,开发非常简单!而且在DW里面,你写代码完全不影响美工调整页面,可以很好的分工。美工也不会吃饱了撑的去动你用<>括起来的代码段。虽然在一个文件里面,大家分工良好,合作愉快。

而且调试还很方便, 你随便一个out.println(..),然后刷一下页面,看看浏览器页面上有什么结果,多方便。

然后看看JSP的Tag给我们带来了什么,nightmare !美工mm用DW打开页面,看到的是一片空白,或者支离破碎的页面,她就纳闷为什么看起来好好的页面怎么就这样子呢?不应该啊!而我们的程序员gg也很努力的写着让美工mm看起来似乎很亲切的仿佛想html一样的tag,而不得不努力在后台做着tag的映射xml文件和编写麻烦的tag程序,极大的增加了JSP页面的调试难度,结果却是被mm扁。

有人说了,很多页面显示的重复性工作,你用Tag可以节省页面代码量,那我写Java class不一样吗,然后你在JSP里面调用Java class好了,tag本质上就是java class,有什么区别,就是调用形式不同而已。还生搬硬造了一套既不讨好美工mm的,又让程序员gg别扭的Tag语法,此语法还四不像,好像像HTML,又不像,好像像java bean,可也不对味。最过分的是每个Web框架还自己搞一套Taglib,JSP2.0还增加更多的Taglib,我看除了把我们的程序员gg当猴耍之外,没有任何好处。

如果Taglib真能实现页面和代码分离的话,他还总算有点可取之处,然而它根本没有做到,你仍然不得不在JSP里面去写点Java代码,你仍然不得不在Tag程序里面写点out.println(...),来输出页面内容,既然你做不到分离,那么藕断丝连的,何必矫揉造作的分开呢?增加了我们程序员gg的负担不说,还让我们的美工mm在DW里面面对一些支离破碎的页面无从下手。Taglib,你罪莫大焉!

从Sun在JSP里面引入Taglib,我就认为他是一个谎言!我认为大家都被Sun欺骗了,我做JSP编程,但凡我写过的JSP,我从来不用Tag,我觉得写java代码让我很舒服,我不需要再去学习那别扭而无意义的Tag语法,来增加我的工作量,来增加我的JSP页面调试难度。
   
时间:2004-04-10
Xiaogang 写道
Xiaogang (时间要用在刀刃上) says:
因为我不喜欢taglib
Xiaogang (时间要用在刀刃上) says:
基本的东西还是清楚地
Xiaogang (时间要用在刀刃上) says:
struts已经变成一个大杂烩了
Robbin 飞龙在天 says:
原来你也不喜欢taglib
Xiaogang (时间要用在刀刃上) says:
我曾经非常喜欢taglib
Xiaogang (时间要用在刀刃上) says:
自己定义过smartTag
Xiaogang (时间要用在刀刃上) says:
后来发现不好玩
Xiaogang (时间要用在刀刃上) says:
现在除了认证,控制内容,输出特殊的tag比如日历选择之外
Xiaogang (时间要用在刀刃上) says:
都几乎不用tag了

Xiaogang (时间要用在刀刃上) says:
这一段太偏激了
Xiaogang (时间要用在刀刃上) says:
很多时候taglib的功能无法替代
Xiaogang (时间要用在刀刃上) says:
比如jstl:format
Xiaogang (时间要用在刀刃上) says:
那你们怎么处理多语言
Robbin 飞龙在天 says:
就是看看了解一下
Robbin 飞龙在天 says:
用ResourceBundle一样可以处理多语言
Xiaogang (时间要用在刀刃上) says:
在叶面里面
Xiaogang (时间要用在刀刃上) says:
如果你不用tag
Xiaogang (时间要用在刀刃上) says:
你会怎么写
Robbin 飞龙在天 says:
<? ... ?>
Xiaogang (时间要用在刀刃上) says:
messageResource.getString("Order.PlaceOrder")
Xiaogang (时间要用在刀刃上) says:
和<c:fmt key="Order.PlaceOrder"/>
Robbin 飞龙在天 says:
有什么了,无非就是长一点,多敲几个字而已
Xiaogang (时间要用在刀刃上) says:
你愿意用那个
Robbin 飞龙在天 says:
前面的
后面的语法让我很不舒服
我宁可多敲几个字
Xiaogang (时间要用在刀刃上) says:
<c:fmt>还有一个显而易见的好处
Xiaogang (时间要用在刀刃上) says:
就是可以在ant任务中自动检查所有的key是否都在resource文件中出现过
Xiaogang (时间要用在刀刃上) says:
是否有遗漏
Xiaogang (时间要用在刀刃上) says:
tag另外一个好处在于它的可编译性
比如说你做一件事情必须关闭资源
用<tag></tag>包围
只要编译通过
就可以保证
用于减少人为错误
Robbin 飞龙在天 says:
tag是有好处,但是tag是一种半截子方案
tag带来的问题同样多
而且tag这种方式本来就是反JSP原本的嵌入式页面的原意的
所以
tag最多是一个过渡
Xiaogang (时间要用在刀刃上) says:
施主:你着相了
   
0 请登录后投票
时间:2004-04-10
dlee 写道
我在两年前学习如何开发 custom tag 时 keys 就告诉我 custom tag 没有多大用处。keys 曾经为 Ofbiz 开发过几个 i18n 方面的 custom tag,对这些应该是很熟了。custom tag 无非就是模仿 ColdFusion 的开发方式,以求提供易用性和提高开发效率。你不知道在 ColdFusion 中发一封邮件是一件多么简单的事情,一个 tag 就搞定了。可是在 JSP 中,你就要自己写代码或者写 custom tag 来做这件事情。ColdFusion 当年确实极为成功,但是不可否认 ColdFusion 这类开发方式已经落后于时代了。如果要模仿你就做彻底,象 ColdFusion 一样完全基于 tag 来做开发,不要搞成一个象 C++ 一样不伦不类概念完整性极差的东西。所以我认为 JSP+JSTL 也是没有前途的开发方式。
   
0 请登录后投票
时间:2004-04-10
昨天和一位网友聊天时我说,是否使用 custom tag 很大程度上是一种哲学上的选择,争论 custom tag 的好坏其实没有多大意义,关键是你要把你自己的事情做彻底。确实没有很多场合必须要使用 custom tag,都可以直接用 Java 类来实现。你说这些 JSTL 都能做,你干吗要重复发明轮子?但是有人就喜欢这样。否则有了 KDE 干吗还要有 GNOME?JSTL 我看也就是 Sun 在力推吧?

关于概念完整性我还要再说两句,为什么 ColdFusion 保持了很好的概念完整性,以至于被当作软件体系结构的经典案例?就是因为 ColdFusion 的核心设计人员只有 Allaire 兄弟两人。而 Sun 始终没有注意保持 Java 的概念完整性。这点在 Java 核心类库中就可以看出来,包括 IO 新老两种版本(按理说有了新版本,老版本所有的类都可以不用了吧?但是这其实是一件不可能的事情),极为弱智的 AWT 版本1 和极为优秀的 AWT 版本2 简直一个天上一个地下。现在 Sun 又引入了 Template 和 GP,总有一天 Sun 会把 Java 搞成一个类似于 C++ 的大杂烩的。
所以我的看法是好的体系结构都在小公司的产品中,大公司的产品是很难找到好的体系结构的。
   
0 请登录后投票
时间:2004-04-10
jstl是统一市面上混乱的taglib的,struts有logic iterator标签,
webwork也有iterator标签,struts有format标签,
webwork也有format标签,每用一个Web 框架,就要学习他的特定标签,
谁受得了。所以如果用 taglib的话,还是推荐直接用jstl,包括Spring的作者
也是推荐用jstl,而不要用框架的私有标签。
至于到底一开始要不要用taglib,那又是Another Story了,不过我到没有
象robbin那么反对taglib。
所以我觉得以后会出现两个分支,一个用tapestry+Spring+hibernate,
一个用jstl+Spring Web MVC+Spring+Hibernate,两种方案都会有
蛮多人采用的。因为毕竟在外面可以找到很多很好用的taglib比如displaytag用,所以jsp+taglib还算一种解决方案。至于tapestry自己发展的话则要看tapestry的控件发展速度了。
   
0 请登录后投票
时间:2004-04-10
我觉得有少些taglib还是很方便的,但也很不喜欢用taglib来取代已有的html标签,和逻辑判断。

但是这个问题,有点落入到“审美”趋向当中了,有人讨厌,但也有人很喜欢的,身边都有例子。而做项目则必须求的统一。

楼上两位PM,若是你们的项目,你们要求底下的coder一定不用taglib吗?
   
0 请登录后投票
时间:2004-04-10
我们已经不做 JSP 了,我们有自己的开发方式。所以“你们要求底下的coder一定不用taglib吗?” 就无从谈起了。
我只是不喜欢折中的解决方案,要用 custom tag 就全部使用,否则就别用。
对于小公司,采用什么框架很多时候确实要看技术最牛并且负责项目的那个人的选择,很多时候就是出于审美上的好恶。采用什么开发方式在选择好框架之后就确定了。例如如果用 Struts,他们推荐用 taglib,那么你最好就用它的 taglib 好了。选择开发框架是很严肃和慎重的事情,不应该出现三天两头更换开发框架的情况。所以 femto 所说的那种为了保持兼容性而不使用框架私有的 taglib 我觉得是不必要的。JSTL 充其量只能是各个框架私有 taglib 的一个公共子集,我们都知道标准的更新是很慢的(考虑考虑政治吧),如果要做更复杂的事情标准的 JSTL 不能提供而框架私有的 taglib 可以提供,难道你还要等待 JSTL 提供吗?
   
0 请登录后投票
时间:2004-04-10
jstl只是统一了logic/fmt这些常用tag,使得你使用这些常用功能的时候不需要学习各种私有语法(而且jstl确实还是不错的,虽然Sun其他东东都不太灵,jstl还是简洁明了,很容易学习使用)至于其他特定功能当然只能用其他特定的taglib实现了。
关于好的taglib又想起另外一个东东,OSCache,
使用OSCache可以很好的缓存jsp fragment提高性能,而使用只要在要缓存的jsp fragment周围围上<cache:cache> tag,非常方便,所以还是有些好的tag的。可惜tag对于美工的不友好确实是个问题。
   
0 请登录后投票
时间:2004-04-11
物极必反,用的太多当然不好。
但如果有的东西是经常用到的,为什么不做成tag呢?
而且把java代码放到网页里真的太乱了,不美观。
   
0 请登录后投票
时间:2004-04-11
诸如数据绑定/数据校验/Session Tracking中的Url 重写/数字,日期的Format,不用Tag,每次用到都要
程序员写代码,难以想象,完全增大代码量和维护难度。
   
0 请登录后投票
论坛首页 AJAX版 UI

跳转论坛:
JavaEye推荐