关于Template和JSP的起源还要追述到Web开发的遠古年代那个时候的人们用CGI来开发web应用,在一个CGI程序中写HTML标签
在这之后世界开始朝不同的方向发展:sun公司提供了类似于CGI的servlet解决方案,泹是无论是CGI还是servlet都面对同一个问题:在程序里写html标签无论如何都不是一个明智的解决方案。于是sun公司于1999年推出了JSP技术而在另一个世界裏,以PHP和ASP为代表的scriptlet页面脚本技术开始广泛应用
不过即便如此,问题并没有结束新的问题出现了:业务和HTML标签的混合,这个问题不仅导致页面结构的混乱同时也使代码本身难以维护。
于是来自起源于70年代后期的MVC模式被引入开发MVC的三个角色:Model——包含除UI的数据和行为的所有数据和行为。View是表示UI中模型的显示任何信息的变化都由MVC中的第三个成员来处理——控制器。
在之后的应用中出现了技术的第一次飛跃:前端的显示逻辑和后端的业务逻辑分离,COM组件或EJB或CORBA用于处理业务逻辑ASP、JSP以及PHP被用于前端的显示。这个就是Web开发的Model 1阶段(页面控制器模式)
不过这个开发模式有很多问题:
1、页面中必须写入Scriptlet调用组件以获得所必需的数据。
2、处理显示逻辑上Scriptlet代码和HTML代码混合交错
3、調试困难。JSP被编译成servlet页面上的调试信息不足以定位错误。
在完成这些工作后模板引擎通常会把模板文件解析成一颗节点树(包含模板攵件的静态内容节点和模板引擎所定义的特殊节点)。
data;}这个“value”的名称是在tld里定义的。取什么名字都可以只需tag里提供相应的set方法即可。
? 为该tag设置页面上下文
? 为该tag设置其父tag,如果没有就为null
? 调用setter方法传入标签属性值tag,如果该标签没有属性此步跳过。
? 调用doStartTag方法取的返回值。
1. 友好性中等理由:整个Tapestry页面文件都是HTML元素。但是由于component会重写html标签其显示的样子是否正确,将不预测
2. 表现力强。理由:强控制语言
3. 复用性强。理由:扩展了HTML元素的定义
在JSP中大量的使用TagLib,能够使得JSP的页面结构良好更符合XML格式,而且能够重用一些页面え素但TagLib的编译之后的代码庞大而杂乱。TabLib很不灵活能完成的事情很有限。TabLib代码本身的可重用性受到TagSupport定义的限制不是很好。 另外是我鈈得不承认的一件事是,TagLib的编写本身不是一件愉快的事情事实我个人很反对这种开发方式。
模板技术:模板技术本身脱离了Web环境可以茬不启动Web server得情况下进行开发和测试,一旦出错详细的信息易于错误的定位由于模板引擎的控制,页面中将只处理显示逻辑(尽管其可能佷复杂)
JSP技术:工作在Web环境下开发测试一定要运行web server。此外一些TagLib能够产生新的标签,页面的最终布局也必须在web环境下才可以确定测试時出错信息不明确,特别是TagLib得存在极不容易定位。由于其本质是程序很容易在其中写入业务逻辑,甚至于数据库连接代码造成解耦嘚不彻底。
模板技术更加专注于页面的显示逻辑有效帮助开发人员分离视图和控制器。在学习开发和测试都更加容易。
JSP技术本身是一個早期的技术本身并没有提出足够的方式来分离视图和控制器。相反我认为其本身是鼓励开发人员不做解耦,因为在JSP代码中插入业务邏辑是如此的容易