《选择jsp而不是servlet作为BS前台主流方案是JAVA的战略性方向错误 》一文是经验角度对jsp选择方向的一种质疑;其不受“公论”(公论对中国人的思维影响很大)的逆向思维方式本身就会引起争论,本是意料中的。现把部分争论回答归纳起来,学习、实践、争论、归纳、再实践,这是取得提高和突破的途径。
首先,JSP是一种WEB界面处理方式(不是语言),所以是否适用MCV模式实际在存在着很大的争议。所以MCV模式作为JSP/SERVLET的选择依据是不合适的。不过,JSP/SERVLET的表达层的应用方式,是没有疑问的,尽可能将业务逻辑层分离出去,符合项目需求控制和成本控制的原则,最终将提高项目质量并降低维护成本。无论是那一种方案,将应用业务逻辑包装起来,成为与其他模块/层尽可能低耦合的类,也是一种必然的选择,也是面向对象的方式的体现;面向对象方式主要体现为继承/接口,如果否认它的积极意义,也就没有讨论的余地了。
OOP谁都会接受的,但这里关键焦点在于,对象是什么?在不同的环境,对象有完全不同的含义,脱离这点,OOP其实成了一个过分泛滥的无用的名词。在VB中它通常表示界面中的一个视窗组件;而在C++中,通常是处理的一组功能;在JAVA中的业务逻辑中,对象一般是有独立意义的一种客观事物,而当 JAVA用于表达层时,无论是JSP/还是swing.awt,它都象VB一样表达一种view图结构。到底表达什么,什么可以抽象,什么应该抽象,很大程度取决于开发者的经验习惯。
JSP中适用那种类型,首先要回忆JSP针对的开发模式/假想是什么,也就是JSP这种技术产品出现时的分析用例是什么。文中其实已经提到了最根本的论点和解释(居然有网友没有读出来),JSP用例是抄ASP的,也就是“希望非程序人员可以直接生成动态内容”的JSP,这是SUN选择向JSP进化的最根本的理由。文中最大的论据也在于:事实表明非程序人员写不了JSP;所以JSP侧重点本身就错了,它应该选择方便程序员的方向!
再回想一下各人接手的项目是什么形式的。或者是从个人开始,按客户要求(甚至自已就是客户?)直接开发系统;开发一个版反馈给客户再修改第二版?还是接手一批原型,一般是HTML,然后从这里着手抽象可以抽象的东西,包装可以包装的东西?即使是第一种情况,开发者包打天下,最经常的方式是什么呢?应该是万般抄开始,从网上找相近的网页,变成HTML后修改。可见,可以把WEB的开发看作是从HTML开始的。问题的差别就在于是如何从HTML开始的。
如果认为是从HTML直接开始,从中通过<%=%>插入各种生成值,也就是SUN最早假设的方式;最终生成简单的网页,当功能不太OK 时再一页页延伸,那么JSP的确是合适的选择。顺便说一句,如果生成的是逻辑功能简单而页面表达复杂的HTML,(这是中国式网站的最典型情况),JSP 的优越性是非常明显的。不过反过来,这样的缺点也就在于随着项目的开展、庞大、复杂化,开发者和维护者最终都会陷入“网页陷阱”,也就是页面变程序缺乏逻辑的联系,变得难以维护了,这其实也是为什么要用动态网页代替HTML的原因。
更通常的做法是在HTML上再处理,抽取出各个特征代码,一一包装起来成为可重用的组件,(注意和业务逻辑组件的区别),另一方面,组件中的 HTML代码为了修改方便,要求修改后是无需编译的。从这个要求出发,派生出了XML/XSL/XSLT一整个体系,也派生出了TILES,SLIDE, struts包括它的validator,等等。无论是那一种,HTML必须整理再分解才有可能达到重用和降低维护成本的目的。对于功能/内容/服务驱动的网站,网页一般简洁并功能模块重用性高,这种操作方式尤其显得高效而简洁,网页本身就可以直接用UML/USECASE的方式预先设计。这就是《选择 jsp而不是servlet作为BS前台主流方案是JAVA的战略性方向错误 》中假设的项目类型,也就是这时侯,对象的继承对于表达层才有现实的意义。
事实上,JSP也是基本支持上面的网页分解、抽象、重用,最经常是使用include方式;在taglib和struts:logic中,还可以根据上下文变量条件决定include,所以也基本上达到了类似的目的。《选择jsp而不是servlet作为BS前台主流方案是JAVA的战略性方向错误》一文争论的是,是JSP不能处理重用顶级模板,限制了这种表达层对象抽象重用的水平。如果选用servlet为主要方向,同样的投入,要达到方便程序员直接修改界面代码,同时也便于(选择)各个方向层次的对象应用,就没有JSP那样的障碍的。SUN在开始JSP时是一个无负担的开发者,完全可以这样做,但却选择了与ASP雷同的用例方案,没有利用自已最大威力的对象语言,把JAVA降格成脚本(javalet),最终不得不通过开发标签 /javabean来弥补原来的不足,不但加大了学习者的负担(就以Tag而论,能熟练使用的jsp程序员有几何?),也减少了自已的市场份额和市场成功的机会。这就是对《选择jsp而不是servlet作为BS前台主流方案是JAVA的战略性方向错误 》批评SUN是笨蛋的原因。
无论如何,IT/软件行业,是一个支持独立思考,支持创造性思维的行业,可以怀疑一切权威,在实践中体验并用实践来证明,是软件行业技术进步的基础,也是IT行业存在的基础。这不是一个子日诗云,权威(老师)定论的领域,如果否认这一点,象一些人表现的那样对权威的奴性崇拜,陷入单纯人身攻击的怪圈,也就没有什么再讨论的必要性了。