Template和JSP技术

(本文发于java emag第一期)
一、起源与现状:

关于TemplateJSP的起源还要追述到Web开发的远古年代,那个时候的人们用CGI来开发web应用,在一个CGI程序中写HTML标签。

在这之后世界开始朝不同的方向发展:sun公司提供了类似于CGIservlet解决方案,但是无论是CGI还是servlet都面对同一个问题:在程序里写html标签,无论如何都不是一个明智的解决方案。于sun公司1999年推出了JSP技术。而在另一个世界里,以PHPASP为代表的scriptlet页面脚本技术开始广泛应用。

不过即便如此,问题并没有结束,新的问题出现了:业务和HTML标签的混合,这个问题不仅导致页面结构的混乱,同时也使代码本身难以维护。

于是来自起源于70年代后期的MVC模式被引入开发。MVC的三个角色:Model——包含除UI的数据和行为的所有数据和行为。View是表示UI中模型的显示。任何信息的变化都由MVC中的第三个成员来处理——控制器

在之后的应用中,出现了技术的第一次飞跃:前端的显示逻辑和后端的业务逻辑分离,COM组件或EJBCORBA用于处理业务逻辑,ASPJSP以及PHP被用于前端的显示。这个就是Web开发的Model 1阶段(页面控制器模式)。

不过这个开发模式有很多问题:

1.       页面中必须写入Scriptlet调用组件以获得所必需的数据。

2.       处理显示逻辑上Scriptlet代码和HTML代码混合交错。

3.       调试困难。JSP被编译成servlet,页面上的调试信息不足以定位错误。

这一切都是因为在Model 1中并没有分离视图和控制器。完全分离视图和控制器就成了必须。这就是Model 2。它把Model 1中未解决的问题——分离对组件(业务逻辑)的调用工作,把这部分工作移植到了控制器。现在似乎完美了,不过等等,原来的控制器从页面中分离后,页面所需的数据怎么获得,谁来处理页面显示逻辑?两个办法:1. 继续利用aspphp或者jsp等机制,不过由于它们是运行在web环境下的,他们所要显示的数据(后端逻辑产生的结果)就需要通过控制器放入request流中;2. 使用新手法——模板技术,使用独立的模板技术由于脱离的web环境,会给开发测试带来相当的便利。至于页面所需数据传入一个POJO就行而不是request对象。

模板技术最先开始于PHP的世界,出现了PHPLIB TemplateFastTemplate这两位英雄。不久模板技术就被引入到java web开发世界里。目前比较流行的模板技术有:XSTLVelocityJDynamiTeTapestry等。另外因为JSP技术毕竟是目前标准,相当的系统还是利用JSP来完成页面显示逻辑部分,在Sun公司的JSTL外,各个第三方组织也纷纷推出了自己的Taglib,一个代表是struts tablib

二、 模板技术分析:

模板技术从本质上来讲,它是一个占位符动态替换技术。一个完整的模板技术需要四个元素:0. 模板语言,1. 包含模板语言的模板文件,2. 拥有动态数据的数据对象,3. 模板引擎。以下就具体讨论这四个元素。(在讨论过程中,我只列举了几个不同特点技术,其它技术或有雷同就不重复了)

1.       模板语言:

模板语言包括:变量标识和表达式语句。根据表达式的控制力不同,可以分为强控制力模板语言和弱控制力模板语言。而根据模板语言与HTML的兼容性不同,又可以分为兼容性模板语言和非兼容性模板语言。

模板语言要处理三个要点:

1. 标量标记。把变量标识插入html的方法很多。其中一种是使用类似html的标签;另一种是使用特殊标识,如Velocity或者JDynamiTe;第三种是扩展html标签,如tapestry。采用何种方式有着很多考虑,一个比较常见的考虑是“所见即所得”的要求。

2. 条件控制。这是一个很棘手的问题。一个简单的例子是某物流陪送系统中,物品数低于一定值的要高亮显示。不过对于一个具体复杂显示逻辑的情况,条件控制似乎不可避免。当你把类似于<IF condition=”$count < 40”><then><span class=”highlight”>count </span></then></IF>引入,就象我们当初在ASPPHP中所做得一样,我们将不得不再一次面对scriptlet嵌入网页所遇到的问题。我相信你和我一样并不认为这是一个好得编写方式。实际上并非所有的模板技术都使用条件控制,很多已有的应用如PHP的以及我曾见过一个基于ASP.NET的应用,当然还有JavaJDynamiTe。这样网页上没有任何逻辑,不过这样做的代价是把高亮显示的选择控制移交给编程代码。你必需做个选择。也许你也象我一样既不想在网页中使用条件控制,也不想在代码中写html标记,但是这个显示逻辑是无可逃避的(如果你不想被你的老板抄鱿鱼的话),一个可行的方法是用CSS,在编程代码中决定采用哪个css样式。特别是CSS2技术,其selector机制,可以根据html类型甚至是elementattributesapply不同的样式。

3. 迭代(循环)。在网页上显示一个数据表单是一个很基本的要求,使用集合标签将不可避免,不过幸运的是,它通常很简单,而且够用。特别值得一提的是PHP的模板技术和JDynamiTe技术利用html的注释标签很简单的实现了它,又保持了“所见既所得”的特性。

下面是一些技术的比较:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你用过Ease Template吗?   PHP工程中的模板应用,关于它的好处,我想无论是在实际开发阶段还是上升到设计模式的角度都已经有很多“前辈先哲”"讨论过了。就项目实施而言,在一些中型甚至大型的项目中,有效的将HTML(还有其他文本形式的表现层)和PHP代码分开,不仅在开发阶段可以提高界面设计人员和应用程序编写人员的工作效率,更会给项目的测试和维护带来巨大的便利。 什么是模板技术?   PHP模板发展自Perl的Template。剥开神秘的面纱,模板技术的核心概念简单得令人心跳:要将你的美工页面指定为模板文件,只需将页面中活动的内容部分(如数据库输出,用户交互等)定义成形式为的变量放在模板文件中相应的位置,当用户浏览时,由PHP程序文件打开该模板文件,将模板文件中定义的变量进行替换。当然,替换成对应的数据库输出或者用户交互等动态生成内容。 Ease Template 模板能够改善网站的结构,其特点有: * 可以在几秒钟改变整个站点的外观; * 可以让网站更容易实现多语言; * 抽象程序设计,没有垃圾HTML代码; * 稳定性能初期的强大甚至超越混编代码; * 提供完善的 Debug 平台; * 开发效率快地令人惊讶; * 更容易重用模版; * 开源版权保护(保证您的版权不会被侵犯)。 模板技术经过很多年的发展已经演变出各式各样的类型:phplib就效率而言在大量应用的时候效率会降低很多,但是拥有语法简单的优势;Smarty 语法强大效率很高,问题是架构庞大,语法过于复杂。如果你正在设计一个交互式网站,你一定会关注两个主要的问题:美工和程序。这也是一个网站在建设中抛开其内容之后最关键的要素。 通常有两种方式来协调美工和程序之间的关系: 1.先做好美工页面,然后由程序员直接在美工页面的HTML文件中嵌入ASP、JSP、PHP等程序代码。 2.美工和程序同时进行,但这时因为没有页面框架,程序只能先做出部分代码,双方完成后再进行一次美工页面和程序代码的嵌入合成。   在实际的网站建设过程中,由于人员、进度等环境的限制,大家通常会混合使用上面两种协调方式。然而这两种方法都有不足之处: 1. 效率不高。两者协调不好可能产生等待、重复代码调试等现象; 2. 调试不畅。由于程序代码最终需要嵌入在HTML页面中,代码的嵌入、调试、纠错都比较繁琐; 3. 维护不便。一旦美工设计需要修改,如网站改版,那么所有程序和HTML代码混合页面都需要重写。 如果你正在使用PHP程序建设网站,那么恭喜你,PHP的模板技术会比较圆满地解决上述问题。 模板应用与结构,以往的开发流程如下:   流水线1:网站设计 -> 切图转为htm -> php工程师写程序 -> 程序套用htm -> 开发结束。 如果存在修改时流程如下:   流水线1:网站设计修改 -> 切图转为htm -> php工程师改程序 -> 程序套用htm -> 修改结束。 采用Ease Template之后将有一些区别性的变化,开发流程如下:   流水线1:php工程师写程序与简单模板 -> 程序测试 -> 开发结束。   流水线2:网站设计 -> 模板工程师修改(Dreamweaver) -> 开发结束。 修改流程如下:   流水线1:网站设计修改 -> 模板工程师修改(Dreamweaver) -> 修改结束。   流水线2:程序员工作被释放出来   Ease Template相对于Smarty或phplib提供更简单更高效的方法,甚至可以将数据库运用方法直接写入模板中,这样将无须复杂的数组转换操作。   目前发行的任何一套模板引擎都没有提供开源商业化版权保护。公司开发出的程序,有可能被合作方转卖或盗用。使用Ease Template便不用再为此问题担心,它提供了版权保护设置。开发方启用版权保护设置并对所有程序运行一次后将生成版权保护代码。开发方不需提供程序模板给合作方,程序仍可以独立完整运行。如果合作方需要修改原始模板将非常复杂甚至无法修改。商业版本的程序如果没有模板要修改页面对于任何人都将是非常头疼的工作,而采用Ease Template的开发者则按正常流程即可完成所有的修改工作。   Ease Template 经过多年的发展已经被很多框架所采用,其中比较有名气的当属FleaPHP、ThinkPHP。有些框架直接集成了Ease Template插件,用户选择Ease Template的时候无需担心兼容性以及稳定性。   当Ease Template用户觉得方法过少造成不知如何使用的时候,可以运用{run:}php方法{/run},此操作完全支持系统的所有方法以及用户自己写的方法。   看到这里也许您提出一个问题,那就是Ease Template具有这么多功能那他的速度又能达到什么程度?举个例子:对Ease Template三个引擎进行1万次循环并且载入多个模板情况下的测试结果:替换引擎0.06秒、编译引擎0.04秒、MemCache引擎0.03秒。与各种模板比较,Ease Template编译引擎的速度已经远远超越同类大部分模板,所以您无需为Ease Template的速度担心。   Ease Template 模板技术的基本概念就介绍到这里,请继续关注更加有趣的功能介绍。
书名:JSP 2.0 技术手册(电子书) 格式:PDF 出版:电子工业出版社 作者:林上杰、林康司 本书图文并茂,以丰富的实例为引导,全面介绍了主流的 Java Web 开发技术—— JSP 2.0,重点介绍Java在展示层的两项重要技术:Java Servlet与JavaServer Pages。 它们是最重要的 Java 核心技术。对这两项技术的深入了解,将有助于您未来对于 JavaServer Faces(JSF)技术以及Java Web Services技术的学习 目录 第一章 安装执行环境 1-1 安装 J2SDK 1.4.2 1-2 安装 Tomcat 5.0.16 1-3 安装 JSPBook 站台范例 1-4 安装 Ant 1.6 第二章 Servlet 2.4 简介 2-1 Servlet 简介 2-2 First Servlet Sample Code 2-3 Servlet 的生命周期 2-4 Servlet 范例程序 2-5 Servlet 2.4 的新功能 第三章 JSP 2.0 简介 3-1 JavaServer Pages 技术 3-2 What is JSP 3-3 JSP 与 Servlet 的比较 3-4 JSP 的执行过程 3-5 JSP 与 ASP 和 ASP+ 的比较 3-6 JSP 2.0 新功能 第四章 JSP 语法 4-1 Elements 和 Template Data 4-2 批注(Comments) 4-3 Quoting 和 Escape 规则 4-4 Directives Elements 4-5 Scripting Elements 4-6 Action Elements 4-7 错误处理 第五章 隐含对象(Implicit Object) 5-1 属性( Attribute ) 与范围( Scope ) 5-2 与 Servlet 有关的隐含对象 5-3 与 Input / Output 有关的隐含对象 5-4 与 Context 有关的隐含对象 5-5 与 Error 有关的隐含对象 第六章 Expression Language 6-1 EL 简介 6-2 EL 语法 6-3 EL 隐含对象 6-4 EL 算术运算符 6-5 EL 关系运算符 6-6 EL 逻辑运算符 6-7 EL 其他运算符 6-8 EL Functions 第七章 JSTL 1.1 7-1 JSTL 1.1 简介 7-2 核心标签库(Core tag library) 7-3 I18N 格式标签库(I18N-capable formatting tags library) 7-4 SQL 标签库(SQL tag library) 7-5 XML 标签库(XML tag library) 7-6 函数标签库(Functions tag library) 第八章 JSP 与 JavaBean 8-1 JavaBean 的简介 8-2 JSP 与 JavaBean 8-3 JavaBean 的范围 8-4 JavaBean 的移除 第九章 网页窗体的处理 9-1 HTML 窗体如何传送数据 9-2 窗体中常见的输入类型 9-3 JSP 处理窗体 9-4 文件上传—— Oreilly 上传组件 9-5 jspSmartUpload ——上传和下载 9-6 本文区输入类型(Textarea) 第十章 Session Tracking 10-1 Stateful & Stateless 10-2 Session Tracking 的四种方法 10-3 Session 的生命周期 10-4 HttpSessionBindingListener 接口 10-5 Shopping Cart 范例程序一 10-6 Shopping Cart 范例程序二 第十一章 Filter 与 Listener 11-1 Filter 简介 11-2 Filter 的运作方式 11-3 实现阶段第一个 Filter 11-4 对请求做统一的认证处理 11-5 ServletRequest 和 ServletResponse 之 Wrapper 类 11-6 使用 Filter 来解决中文问题 11-7 Listener 接口简介 11-8 ServletContext Listener 11-9 HttpSession Listener 11-10 ServletRequest Listener 第十二章 JSP 执行环境与开发工具 12-1 Tomcat 5.0 的介绍 12-2 JSP 开发工具介绍 12-3 Eclipse 简介与安装 12-4 使用 Eclipse 开发 Hello

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值