您好,欢迎来到思海网络,我们将竭诚为您提供优质的服务! 诚征网络推广 | 网站备案 | 帮助中心 | 软件下载 | 购买流程 | 付款方式 | 联系我们 [ 会员登录/注册 ]
促销推广
客服中心
业务咨询
有事点击这里…  531199185
有事点击这里…  61352289
点击这里给我发消息  81721488
有事点击这里…  376585780
有事点击这里…  872642803
有事点击这里…  459248018
有事点击这里…  61352288
有事点击这里…  380791050
技术支持
有事点击这里…  714236853
有事点击这里…  719304487
有事点击这里…  1208894568
有事点击这里…  61352289
在线客服
有事点击这里…  531199185
有事点击这里…  61352288
有事点击这里…  983054746
有事点击这里…  893984210
当前位置:首页 >> 技术文章 >> 文章浏览
技术文章

用Apache Velocity模板引擎速造网站

添加时间:2014-9-1 17:59:06  添加: 思海网络 

  基于Java的网站开发,很多人都采用JSP作为前端网页制作的技术,尤其是在国内。这种技术通常会存在一些问题,可以通过简单地分析网站开发过程来看看这些问题。通常网站开发采用以下两种方式:

  ◆ 网站功能确定后,由美工设计网页的UI(界面)部分,然后由程序员在其上加入代码显示逻辑(比如循环、判断显示数据结果)。这就是通常的JSP页面制作,当然这部分可以由美工完成模板,然后由JSP工程师以它为原型创建相应的JSP页面。

  ◆ 网站功能确定后,由美工设计网页的UI(界面)部分,然后由网页制作人员在其上加入代码显示逻辑(比如循环、判断显示数据结果)。在这一步的JSP页面制作中,网页制作人员通常只需要懂Java和HTML,在工程师的指导下学会如何嵌入JSP taglib标记,然后以美工的模板为原型制作JSP网页。

  显然后一种方式要比前一种方式分工明确。然而在很多小公司,或者项目紧急的情况下,JSP网页制作和后台程序开发都是同一个人,这样无疑加大了程序员的负担。后一种情况也有两个缺点,一是网页制作人员必须学会如何使用JSP taglib,这将加大网页制作人员的负担;二是如果页面因为客户的要求重新设计,那么无论哪种情况,网页制作人员都要将显示逻辑重新嵌入JSP网页。

  虽然从性能角度和taglib的使用上来说,JSP比PHP和ASP做得要好,但它在设计上同样类似PHP这种服务器页面语言,即在页面中嵌入脚本语言的技术。这使得它虽然比传统基于CGI脚本语言的开发模式速度快,但却将后台程序逻辑与页面显示混淆。

  用MVC模式开发网站

  现在更多的网站制作采用一种称为MVC的模式,也就是将网站制作工作分工,分为M(Model,模型)、V(View,视图)和C(Controller,控制器)。

  ◆ M(Model,模型) M包括后台的事务逻辑、真正处理事务的代码和商业逻辑等,它们是整个网站最重要的工作部分。通常这部分代码相对比较稳定,不会经常变动,就是有所变动也不会对前端的页面产生影响。

  ◆ V(View,视图) V是网页的显示部分,这部分接受来自后台程序的结果或数据,进行显示。V视图通常是变化比较大的部分,比如网站界面的每日更新,每隔一段时间更新网页风格等都会造成V视图部分的大量更改工作。

  ◆ C(Controller,控制器) C在视图和模型之间传递控制,并根据要求调用相应的视图显示模型返回的数据,主要负责调度工作。

  这种职责的分工到底有什么好处呢?它简化了软件开发过程中所有相关人员的工作,使不同部分的修改通常不会影响到其它部分的工作。比如,修改后台某些程序的算法并不影响前台的页面显示,前台页面的修改也不影响后台程序的开发。

  这种分工合作比起JSP混淆代码逻辑和显示层的方式要好得多。所以越来越多的国外程序员在不断提出替代JSP的方案。在众多方案中,基于Java模板引擎的技术脱颖而出,其中著名的有Velocity和Webmacro两种模板技术。

  Velocity模板引擎

  
模板引擎的设计思想最早由Webmacro提出,并被应用在一个著名的搜索引擎www.altavista.com上。后来,这种思想渐渐被Apache开发小组所采用,并作为一个子项目被提出来,这就是现在的Velocity。

  模板引擎与MVC中视图部分的关系更为密切。Velocity可以应用在任何需要格式化数据显示的Java程序中。那么Velocity到底是什么呢?它的官方解释是:“Velocity是一种基于Java的模板引擎,它允许任何人使用简单而强大的模板语言来引用定义在Java代码中的对象。”

  使用Velocity的优点在于:

  ◆ 很容易集成在各种各样的程序领域中;

  ◆ 为网页制作人员提供了一种清晰而简单的语法;

  ◆ 因为模板和代码是分离的,所以可以分别独立的开发和维护它们;

  ◆ Velocity引擎可以很容易地集成到一些Java运行环境,特别是Servlet中;

  ◆ Velocity使得模板可以访问任何环境对象中的共有方法。

  Velocity的强大之处还在于它严格地区分程序开发功能的职责划分。它通过限制模板可能访问的对象(即后台程序允许其得到的对象)来实现这一点。这意味着网页设计人员可以只把精力放在数据的显示部分(View),而程序员则只要关注如何写好程序的控制层(Controller)、商业逻辑与数据管理(Model)。这就是典型的MVC开发模式,它简化了开发和日益复杂的应用和维护工作。

  Velocity最擅长做的工作包括:

  ◆ 基于Servlet的网站制作;

  ◆ Java和SQL代码生成;

  ◆ XML处理和转换;

  ◆ 文字处理,比如生成trf文件等。

  不过,Velocity用得最多的还是在基于Java Servlet的网页程序中做生成网页的引擎,以替代JSP等技术。除了使用比较容易外,它提供了强大的模板语言来显示和操作数据。注意,不是生成数据,这点很重要,因为生成工作应该是程序逻辑的部分。

  Velocity非常适合在J2EE(Java 2 Platform,Enterprise Edition)的网站开发中替代JSP,做输出页面的技术工作。虽然JSP包含在J2EE规范中,但是J2EE本身并不需要JSP。

  用Velocity做网页

  Velocity是如何工作的呢?虽然大多数Velocity的应用都是基于Servlet的网页制作,但是为了说明Velocity的使用,这里将采用更通用的Java Application来说明它的工作原理。

  任何Velocity的应用都包括模板制作和程序部分两个方面。按照惯例,采用HelloWorld来作为第一个程序的示例。

  1. 模板制作模板示例hellosite.vm的内容如下(虽然其不是以HTML为主,但很容易改成一个HTML的页面):

Hello $name!  Welcome to $site world!

  2.Java程序部分 

  下面是Java代码:

import java.io.StringWriter;import org.apache.velocity.app.VelocityEngine;import org.apache.velocity.Template;import org.apache.velocity.VelocityContext;public class HelloWorld{public static void main( String[] args )throws Exception{/*  first, get and initialize an engine  */VelocityEngine ve = new VelocityEngine();ve.init();/*  next, get the Template  */Template t = ve.getTemplate( "hellosite.vm" );/*  create a context and add data */VelocityContext context = new VelocityContext();context.put("name", "Eiffel Qiu");context.put("site", "http://www.eiffelqiu.com");/* now render the template into a StringWriter */StringWriter writer = new StringWriter();t.merge( context, writer );/* show the World */System.out.println( writer.toString() );}}

  将这两个文件放在同一个目录下,编译运行,结果是:

Hello Eiffel Qiu!  Welcome to http://www.eiffelqiu.com world

  为了保证运行顺利,请从Velocity的网站http://jakarta.apache.org/velocity/上下载Velocity的运行包,并将其中Velocity Jar包的路径放在系统的Classpath中,这样就可以顺利编译和运行以上程序了。

  这个程序很简单,但是它能清楚地说明Velocity的基本工作原理。程序中的其它部分基本上很固定,最主要的部分在以下几段代码。

  ◆ Velocity获取模板文件,得到模板引用:

  

Template t = ve.getTemplate( "hellosite.vm" );

  ◆ 初始化环境,并将数据放入环境: 

  

VelocityContext context = new VelocityContext();context.put("name", "Eiffel Qiu");context.put("site", "http://www.eiffelqiu.com");

  ◆ 初始化Velocity模板引擎: 

  

VelocityEngine ve = new VelocityEngine();ve.init();

  ◆ 将环境变量和输出部分结合: 

  

StringWriter writer = new StringWriter();t.merge( context, writer );/* show the World */System.out.println( writer.toString() );

  这一部分在将来的Servlet应用中会有所区别,因为网页输出并不和命令行输出相同,如果用于网页输出,将并不通过System.out输出。 

  小结 

  Velocity解决了如何在Servlet和网页之间传递数据的问题,当然这种传输数据的机制是在MVC模式上进行的,也就是View、Modle和Controller之间相互独立工作,一方的修改不影响其它方面的变动。 

  他们之间的联系通过环境变量(Context)来实现,当然网页制作方和后台程序方要相互约定好对所传递变量的命名,比如上个程序例子中的site、name变量,它们在网页上就是$name、$site。 

  这样只要双方约定好变量名字,就可以独立工作了。无论页面如何变化,只要变量名不变,后台程序无需改动,前台网页也可以任意由网页制作人员修改。 

  通常简单变量名无法满足网页制作显示数据的需要,比如经常会循环显示一些数据集,或者是根据一些数据的值来决定如何显示下一步的数据等。 

  Velocity同样提供了循环、判断的简单语法以满足网页制作的需要。Velocity提供了一个简单的模板语言,供前端网页制作人员使用,这个模板语言简单到大部分懂得Java的人都可以很快掌握,其甚至比Java更简单。 

  当然这种简单是刻意的,因为不需要Velocity什么都能完成,而只需专注于其应该完成的。View层不应该包含更多的逻辑,Velocity的简单模板语法完全可以满足所有对页面显示逻辑的需要,并且也不会发生像JSP那样因为一个无限循环语句而毁掉系统的情况。

关键字:数据、网站、模板、Apache

分享到:

顶部 】 【 关闭
版权所有:佛山思海电脑网络有限公司 ©1998-2024 All Rights Reserved.
联系电话:(0757)22630313、22633833
中华人民共和国增值电信业务经营许可证: 粤B1.B2-20030321 备案号:粤B2-20030321-1
网站公安备案编号:44060602000007 交互式栏目专项备案编号:200303DD003  
察察 工商 网安 举报有奖  警警  手机打开网站