原文出处:http://www.blogjava.net/jackybu/articles/8803.html

这个程序很简单,但是它能让你清楚的了解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三层的逻辑结构发生混淆。

我的网站: http://www.eiffelqiu.com 
Email: eiffelqiu@163.com 
希望和大家交流

Velocity 的工作原理的更多相关文章

  1. Velocity工作原理解析和优化

    在MVC开发模式下,View离不开模板引擎,在Java语言中模板引擎使用得最多是JSP.Velocity和FreeMarker,在MVC编程开发模式中,必不可少的一个部分是V的部分.V负责前端的页面展 ...

  2. springMVC 的工作原理和机制

    工作原理上面的是springMVC的工作原理图: 1.客户端发出一个http请求给web服务器,web服务器对http请求进行解析,如果匹配DispatcherServlet的请求映射路径(在web. ...

  3. springMVC 的工作原理和机制(转)

    工作原理上面的是springMVC的工作原理图: 1.客户端发出一个http请求给web服务器,web服务器对http请求进行解析,如果匹配DispatcherServlet的请求映射路径(在web. ...

  4. SSH三大框架的工作原理及流程

    Hibernate工作原理及为什么要用? 原理:1.通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件2.由hibernate.cfg.x ...

  5. Hibernate工作原理及为什么要用?

    Hibernate工作原理及为什么要用? 原理:1.通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件2.由hibernate.cfg.x ...

  6. [Java] SSH框架笔记_SSH三大框架的工作原理及流程

    Hibernate工作原理及为什么要用? 原理:1.通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件2.由hibernate.cfg.x ...

  7. [JavaEE,MVC] Struts工作原理

    基本概念 Struts是Apache 基金会Jakarta 项目组的一个Open Source 项目,它采用MVC模式,能够很好地帮助java 开发者利用J2EE开发Web应用.和其他的java架构一 ...

  8. SSH三大框架的工作原理以及流程

    Hibernate工作原理以及为什么要用 原理:1.通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件2.由hibernate.cfg.x ...

  9. Spring工作原理与单例

    最近看到spring管理的bean为单例的,当它与web容器整合的时候始终搞不太清除,就网上搜索写资料, Tomcat与多线程, servlet是多线程执行的,多线程是容器提供的能力. servlet ...

随机推荐

  1. PHPUnit初试

    先测试了一下加减,检查一下环境,又调用函数测试了服务器名. 源代码: class DemoController extends \Think\Controller { /** * @assert (5 ...

  2. C#正则表达式Regex类使用

    作为文本处理的利器——Perl语言对正则表达式的最强大支持起到了重要的作用,正因为如此,许多其他语言在加入正则表达式引擎的时候都会或多或少的兼顾perl风格的正则表达式,开发出相应的引擎.本人使用pe ...

  3. 跨域、sql注入、xss攻击

    这几天遇到这三个问题,现在简单的记录下来. 1.跨域 如我服务器的域名是www.test1.com,我在另一个服务器www.test2.com通过ajax访问www.test1.com的数据时,就引起 ...

  4. Entity Framework Code First 映射继承关系

    转载 http://www.th7.cn/Program/net/201301/122153.shtml Code First如何处理类之间的继承关系.Entity Framework Code Fi ...

  5. Oracle XE修改默认HTTP端口8080

    打开SQL*Plus控制台.用sys或者system登陆.然后运行: begin dbms_xdb.sethttpport('9999'); end; / 搞定.

  6. [原博客] POJ 1740 A New Stone Game

    题目链接题意:有n堆石子,两人轮流操作,每次每个人可以从一堆中拿走若干个扔掉(必须),并且可以从中拿走一些分到别的有石子的堆里(可选),当一个人不能拿时这个人输.给定状态,问是否先手必胜. 我们参考普 ...

  7. QLGame 2d Engine源码地址

    QLGame 2d Engine源码地址已经提交到github上,地址为:https://github.com/wsgzxl/QLGame2dEngine

  8. python邮件收发SAMPLE

    #!/usr/bin/env python # -*- encoding: utf-8 -*- import os, socket from time import localtime, strfti ...

  9. POJ_2446_Chessboard

    题目意思就是一个M*N的有洞棋盘棋盘上,用1*2的板子去覆盖没有洞的地方,要求板子不能重叠,最终能否将棋盘完整覆盖. 代码: #include<stdio.h> #include<s ...

  10. PCB快速打样规范

    基本情况 板材为FR-4,板厚1.6mm    板材铜厚为1/2oz,成品铜厚为1oz(加工过程中的沉铜工艺会让铜层增加厚度) 绿油白字    喷锡工艺    最小孔内铜厚1.27um    电铜18 ...