`
yiyanwan77
  • 浏览: 185460 次
  • 性别: Icon_minigender_1
  • 来自: 威海
社区版块
存档分类
最新评论

使用 Velocity 模板引擎开发网站

    博客分类:
  • java
阅读更多
使用 Velocity 模板引擎开发网站

  基于 Java 的网站开发,很多人都采用 JSP 作为前端网页制作的技术,尤其在是国内。这种技术通常有一些问题,我试想一下我们是怎样开发网站的,通常有几种方法:
  1:功能确定后,由美工设计网页的UI(界面)部分,然后由程序员在其上加入代码显示逻辑(比如循环,判断显示数据结果)。也就是通常的 jsp 页面制作,当然这部分可以由美工完成模板,然后由 jsp 工程师再继续以它为原型创建相应的 jsp 页面。
  2:功能确定后,由美工设计网页的UI(界面)部分,然后由网页制作人员在其上加入代码显示逻辑(比如循环,判断显示数据结果),在这一步的 jsp 页面制作中,网页制作人员(通常只懂得 javascript 和 html )在工程师的指导下学会如何嵌入 jsp taglib 标记,然后以美工的模板为原型制作 jsp 网页。

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

  在这方面, jsp 做的并不好,虽然从性能角度和 taglib 的使用上来说,它比 php 和 asp 要强很多, 但是它在设计上很类似 php 这种服务器页面语言,也就是在页面中嵌入脚本语言的技术,虽然它比传统的基于 CGI 的脚本语言的开发模式速度快,但是它将后台程序逻辑与页面显示混淆了,所以从这个角度来说, 它是一种不太良好的设计。想想看,你看到的众多 php 程序是怎么样子的吧,在一堆 .php 文件中,你已经分不清楚那些是后台程序,那些只是用来显示页面的程序。

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

  • M(Model, 模型)也就是后台的事务逻辑,真正处理事务的代码,商业逻辑等等。他们是整个网站最重要的工作部分,通常这部分代码相对来说比较稳定,不经常变动,就是有所变动也不会对前端的页面有什么影响。
  • V(View 视图): 也就是网页的显示部分,这个部分接受来自后台程序的结果或数据,进行显示,但是这个部分通常是变化比较大的部分,比如网站的界面更新是经常要要作的事情,每隔一段时间更新网页风格就会造成 View 视图部分的大量更改工作。
  • C(Controller 控制器). 在视图和模型之间传递控制,并根据要求调用相应的视图显示模型返回的数据,主要负责调度工作。

      这种职责的分工到底有什么好处呢,它简化了软件开发过程中所有相关人员的工作, 使得不同的部分的修改通常不会影响的其他部分的工作,比如,我修改了后台某些程序的算法,并不影响前台的页面显示,前台页面修改不影响后台程序的开发。这种分工合作比起 jsp 混淆代码逻辑和显示层的做法要好的多。

      所以越来越多的国外程序员在不断提出替代 jsp 的方案,在众多方案中, 一种基于 java 模板引擎的技术脱颖而出,最为著名的是 Velocity 和 Webmacro 两种模板技术。

      模板引擎的设计思想最早是有 webmacro 提出的, 后来应用在一个著名的搜索引擎 www.altavista.com 上, 这种思想渐渐被 Apache 开发小组所采用,并作为一个子项目被提出来,这就是现在的 Velocity。模板引擎与MVC中视图这一部分的关系更为密切。它是经常作为一种 jsp 的替代技术出现在国外的一些论坛上的。但是 Velocity 可以应用在任何需要格式化数据显示的 java 程序中。

      那么 Velocity 到底是什么呢?它的官方解释是:
      "Velocity 是一种基于 java 的模板引擎,它允许任何人使用简单而强大的模板语言来引用定义在 java 代码中的对象"

      你可能因为下面几种原因而使用 Velocity:
      1:它很容易集成在各种各样的程序领域中。
      2:它为网页制作人员提供了一种清晰而又简单的语法
      3:因为模板和代码是分离的,所以你可以分别独立的开发和维护它们。
      4:Velocity 引擎可以很容易的集成到一些 Java 运行环境,特别是 Servlet.
      5:Velocity 使得模板可以访问任何环境对象中的共有方法。

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

      Velocity 最擅长做哪些方面的工作呢?
      1: 基于 servlet 的网站制作
      2: Java 和 Sql 代码生成
      3: XML 处理和转换
      4: 文字处理,比如生成 TRF 文件。

      不过 Velocity 用的最多的还是在基于 Java servlet 的网页程序中作生成网页的引擎,以替代 JSP 等技术。 除了比较容易使用外, 它提供了强大的模板语言以显示和操作数据,但是不是生成数据,这点很重要, 因为这个工作应该是程序逻辑的部分。 Velocity 非常适合在 J2EE (Java 2 Platform, Enterprise Edition) 的网站开发中充当替代 jsp 做输出页面的技术工作,虽然 JSP 包含在 j2ee 的规范中,其实 j2ee 本身并不需要 jsp .

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

      似乎所有语言教学的开头都是采用 HelloWorld 来作为第一个程序的示例。这里也不例外。

      任何 Velocity 的应用都包括两个方面:
      第一是: 模板制作,在我们这个例子中就是 hellosite.vm:
      它的内容如下(虽然不是以 HTML 为主,但是这很容易改成一个 html 的页面)

    Hello $name! Welcome to $site world!

      第二是 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 获取模板文件,得到模板引用

    /* 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");

      其他代码比较固定,但是也非常重要,但是对于每个应用来说写法都很相同:
    这是初始化 Velocity 模板引擎

    /* first, get and initialize an engine */

    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 真正的工作原理
      Velocity 解决了如何在 Servlet 和 网页之间传递数据的问题,当然这种传输数据的机制是在 MVC 模式上进行的,也就是View 和 Modle , Controller 之间相互独立工作,一方的修改不影响其他方变动,他们之间是通过环境变量(Context)来实现的,当然双方网页制作一方和后台程序一方要相互约定好对所传递变量的命名约定,比如上个程序例子中的 site, name 变量,它们在网页上就是 $name ,$site 。 这样只要双方约定好了变量名字,那么双方就可以独立工作了。 无论页面如何变化,只要变量名不变,那么后台程序就无需改动,前台网页也可以任意由网页制作人员修改。这就是 Velocity 的工作原理。

      你会发现简单变量名通常无法满足网页制作显示数据的需要,比如我们经常会循环显示一些数据集,或者是根据一些数据的值来决定如何显示下一步的数据, Velocity 同样提供了循环,判断的简单语法以满足网页制作的需要。Velocity 提供了一个简单的模板语言以供前端网页制作人员使用,这个模板语言足够简单(大部分懂得 javascript 的人就可以很快掌握,其实它比 javascript 要简单的多),当然这种简单是刻意的,因为它不需要它什么都能做, View 层其实不应该包含更多的逻辑,Velocity 的简单模板语法可以满足你所有对页面显示逻辑的需要,这通常已经足够了,这里不会发生象 jsp 那样因为一个无限循环语句而毁掉系统的情况,jsp 能做很多事情,Sun 在制定 Jsp 1.0 标准的时候,没有及时的限定程序员在 jsp 插入代码逻辑,使得早期的jsp 代码更象是 php 代码,它虽然强大,但是对显示层逻辑来说,并不必要,而且会使 MVC 三层的逻辑结构发生混淆。

  • 分享到:
    评论

    相关推荐

      Velocity模板引擎技术在Java Web中的应用.pdf

      通过使用Velocity模板引擎技术,可以将Java Web页面视图和业务逻辑分离,提高开发效率和页面生成速度。 Velocity模板引擎技术的优点: 1. Velocity模板引擎技术可以将Java Web页面视图和业务逻辑分离,提高开发...

      velocity开发包vm模板引擎

      Velocity是一款强大的Java模板引擎,由Apache软件基金会开发并维护,它是Apache Jakarta项目的一部分。 Velocity的主要设计目标是将表现层逻辑从应用逻辑中分离出来,使开发者可以专注于业务逻辑的实现,而无需关心...

      velocity模板引擎

      Velocity模板引擎为Java Web开发提供了强大且灵活的功能支持。通过上述知识点的学习,我们可以了解到Velocity的基本用法,包括变量定义、循环、条件判断、格式化、国际化支持等方面的内容。这些知识点是使用Velocity...

      Velocity_中文手册

      Velocity是一个基于Java的模板引擎,它的主要用途是将动态内容嵌入到Web页面中。...通过这些知识的积累,用户能够更充分地利用Velocity模板引擎强大的功能,为网站添加动态内容,优化用户体验,并提高开发效率。

      Velocity模板引擎 v2.2.0.zip

      在这个"Velocity模板引擎 v2.2.0.zip"压缩包中,包含了一个名为"使用须知.txt"的文件,可能详细介绍了如何安装、配置以及使用这个版本的Velocity。而"132688852448074316"可能是另一个相关文件,但没有具体的文件...

      Struts2与Velocity模板

      Velocity 是一种基于 JAVA 的模板引擎,开发人员使用简单的模板语言就可以快速开发显示层,它使得显示层与程序代码分离。在 Struts2 框架中,Velocity 模板引擎可以与 Struts2 集成,实现了显示层与程序代码的分离。...

      Velocity模板解析

      3. **Velocity模板引擎配置** - 可以通过VelocityConfigurer类配置Velocity引擎,比如设置模板路径、编码格式、缓存策略等。 - `Velocity.init()`初始化引擎,`Velocity.evaluate()`或`Velocity.mergeTemplate()`...

      Velocity模板使用指南中文版

      Velocity 是一个基于 Java 的开源模板引擎,它允许开发者将业务逻辑与页面展示分离,使得网页设计者可以专注于页面的布局和样式,而程序员则关注于程序的逻辑处理。Velocity 在 Web 开发、邮件生成、报告生成等领域...

      SpringBoot Velocity 代码生成模板

      4. 使用Velocity模板引擎,将解析出的信息填入模板,生成Java源码。 5. 编译生成的Java文件,添加到Spring Boot项目中。 在`demo`这个文件中,可能包含了上述步骤的示例代码或者配置文件。通过学习和理解这个示例,...

      Java Velocity模板引擎,简单字符串生成

      `src`目录是源代码目录,可能包含使用Velocity模板引擎的Java代码,以及模板文件。 在具体项目中,开发者会在`src`目录下创建模板文件,例如`template.vm`,并使用Velocity API来处理模板和数据,如下所示: ```...

      Velocity--java的模板引擎

      总之,Velocity作为Java的模板引擎,以其简单易用和高效稳定的特性,被广泛应用于Web开发中。通过熟练掌握Velocity,开发者可以更好地实现业务逻辑与界面展示的解耦,提高项目的开发效率和可维护性。

      java swing开发一款代码生成工具swing-generate,可通过velocity模板引擎在线定制模板

      `swing-generate`这款工具的核心功能是结合Velocity模板引擎,提供了在线定制模板的能力。这意味着用户可以自定义模板,模板中可以包含变量、控制结构和逻辑,这些在生成代码时会被相应的数据替换或执行。例如,你...

      Velocity模板入门DEMO

      Velocity模板语言(Velocity Template Language,简称VTL)是Apache软件基金会的Velocity项目中的一部分,它是一种用于生成动态网页内容的模板引擎。Velocity以其简洁、易读的语法,为Java开发者提供了一种高效的...

      velocity web开发

      在Web开发领域,Velocity是一个非常重要的模板引擎,它被广泛应用于生成动态网页内容。Velocity由Apache软件基金会开发并维护,是Apache Jakarta项目的一部分。其设计目标是提供一个简单易用但功能强大的工具,用于...

    Global site tag (gtag.js) - Google Analytics