用Apache Velocity模板引擎速造网站

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

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

◆ 网站功能确定后,由美工设计网页的UI(界面)部分,然后由网页制作人员在其上加入代码显示逻辑(比如循环、判断显示数据结果)。在这一步的JSP页面制作中,网页制作人员通常只需要懂JavaScript和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代码: 

Java代码 
  1. import java.io.StringWriter;  
  2.             import org.apache.velocity.app.VelocityEngine;  
  3.             import org.apache.velocity.Template;  
  4.             import org.apache.velocity.VelocityContext;  
  5.             public class HelloWorld  
  6.             {  
  7.             public static void main( String[] args )  
  8.             throws Exception  
  9.             {  
  10.             /*  first, get and initialize an engine  */  
  11.             VelocityEngine ve = new VelocityEngine();  
  12.             ve.init();  
  13.             /*  next, get the Template  */  
  14.             Template t = ve.getTemplate( "hellosite.vm" );  
  15.             /*  create a context and add data */  
  16.             VelocityContext context = new VelocityContext();  
  17.             context.put("name", "Eiffel Qiu");  
  18.             context.put("site", "http://www.eiffelqiu.com");  
  19.             /* now render the template into a StringWriter */  
  20.             StringWriter writer = new StringWriter();  
  21.             t.merge( context, writer );  
  22.             /* show the World */  
  23.             System.out.println( writer.toString() );  
  24.             }  
  25.             }  


将这两个文件放在同一个目录下,编译运行,结果是: 
Hello Eiffel Qiu!  Welcome to http://www.eiffelqiu.com world 
为了保证运行顺利,请从Velocity的网站http://jakarta.apache.org/velocity/上下载Velocity的运行包,并将其中Velocity Jar包的路径放在系统的Classpath中,这样就可以顺利编译和运行以上程序了。 
这个程序很简单,但是它能清楚地说明Velocity的基本工作原理。程序中的其它部分基本上很固定,最主要的部分在以下几段代码。 

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

Java代码 
  1. Template t = ve.getTemplate( "hellosite.vm" );  


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

Java代码 
  1. VelocityContext context = new VelocityContext();  
  2.             context.put("name", "Eiffel Qiu");  
  3.             context.put("site", "http://www.eiffelqiu.com");  


◆ 初始化Velocity模板引擎:

Java代码 
  1. VelocityEngine ve = new VelocityEngine();  
  2.             ve.init();  


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

Java代码 
  1. StringWriter writer = new StringWriter();  
  2.             t.merge( context, writer );  
  3.             /* show the World */  
  4.             System.out.println( writer.toString() );  


这一部分在将来的Servlet应用中会有所区别,因为网页输出并不和命令行输出相同,如果用于网页输出,将并不通过System.out输出。 
小结 
Velocity解决了如何在Servlet和网页之间传递数据的问题,当然这种传输数据的机制是在MVC模式上进行的,也就是View、Modle和Controller之间相互独立工作,一方的修改不影响其它方面的变动。 
他们之间的联系通过环境变量(Context)来实现,当然网页制作方和后台程序方要相互约定好对所传递变量的命名,比如上个程序例子中的site、name变量,它们在网页上就是$name、$site。 
这样只要双方约定好变量名字,就可以独立工作了。无论页面如何变化,只要变量名不变,后台程序无需改动,前台网页也可以任意由网页制作人员修改。 
通常简单变量名无法满足网页制作显示数据的需要,比如经常会循环显示一些数据集,或者是根据一些数据的值来决定如何显示下一步的数据等。 
Velocity同样提供了循环、判断的简单语法以满足网页制作的需要。Velocity提供了一个简单的模板语言,供前端网页制作人员使用,这个模板语言简单到大部分懂得JavaScript的人都可以很快掌握,其甚至比JavaScript更简单。 
当然这种简单是刻意的,因为不需要Velocity什么都能完成,而只需专注于其应该完成的。View层不应该包含更多的逻辑,Velocity的简单模板语法完全可以满足所有对页面显示逻辑的需要,并且也不会发生像JSP那样因为一个无限循环语句而毁掉系统的情况。 

 

Velocity:强大且灵活的 Java 模板引擎 Velocity 是一个基于 Java 语言的模板引擎,由 Apache 软件基金会提供支持。它允许开发人员使用简单而强大的模板语言(VTL - Velocity Template Language)来引用对象数据,从而生成基于文本的输出。通过将数据的处理逻辑与页面的展示分离,Velocity 使得界面设计和后端开发能够并行进行,大大提高了项目的开发效率。宏可以理解为函数定义,可以在模板中重复使用代码块。调用宏时,只需使用#macroName并传入相应的参数即可。这将输出。 阅读详情

相关推荐

Jsp结合Velocity实现依据Word模板文件生成对应数据文件

Jsp结合Velocity实现依据Word模板文件生成对应数据文件,操作非常灵活,方便。

JSP与Velocity的比较

JSP渲染机制: ServletContext根据path来找到对应的servlet,这个映射在mapper.map方法中完成。通过拓展名".jsp"来找到jspServlet对应的Warpper。接下来调用jspServlet的service方法。 JSP在执行渲染时会被编译成一个java类,而这个类实际上也是一个servlet。 上面代码中的类是JSP编译成java类的一个例子。

NerveMore 6549

jsp、freemarker、velocity简介和对比

jsp、freemarker、velocity简介和对比。---如果你已经开发Java Web应用程序一段时间,那么对于 JVM 的 PermGen 问题可能并不陌生。由于 FreeMarker 模板不编译成类,它们不占用 PermGen 空间,并不需要一个新的类加载器加载

模板引擎总结(Thymeleaf,FreeMarker,Enjoy,Velocity,JSP等),性能对比

比如一些网站的公用设置信息,这些信息基本都是可以通过后台来管理并存储在数据库中,这些信息其实会大量的被前台程序调用,每一次调用都会去查询一次数据库,但是这些信息的更新频率又会很小,因此也可以考虑将这部分内容进行后台更新的时候进行静态化,这样就避免了大量的数据库访问请求,提高了网站的性能。:使用了模板缓冲,在模板缓冲机制的作用下,模板不再是每次出现请求的时候从磁盘读取,而是以最理想的方式在内存中保存和解析。在开发期间,模板缓冲通常处于禁用状态,因为这时请求数量较少,而且要求对页面的修改立即产生效果。

JBIB ENGINE 4871

velocity和freemarker的比较

NULL 博文链接:https://jetway.iteye.com/blog/569436

VOF模型求解方法:从SIMPLEC到PISO的稳定性优化策略

本文深入探讨了VOF模型求解方法中SIMPLEC与PISO算法的稳定性优化策略,重点分析了两种算法在稳态和瞬态问题中的应用差异。通过对比PRESTO离散化方法与其他格式的优劣,提供了针对多相流模拟的实用设置建议和稳定性优化技巧,帮助工程师有效提升计算效率和精度。

yellow的专栏 1153

java三种模板引擎的区别(jsp、freemarker、velocity)

在java领域,表现层技术主要有三种:jsp、freemarker、velocity。 jsp是大家最熟悉的技术 优点: 1、功能强大,可以写java代码 2、支持jsp标签(jsp tag) 3、支持表达式语言(el) 4、官方标准,用户群广,丰富的第三方jsp标签库 5、性能良好。jsp编译成class文件执行,有很好的性能表现 缺点: jsp没有明显缺点,非要挑点骨头那就是,由于可以编写ja...

xiziwen_code 2308

基于文件通信的QMT量化交易信号桥接方案设计与实现

在量化交易系统开发中,进程间通信(IPC)是连接不同计算模块、实现策略逻辑与交易执行解耦的关键技术。其核心原理在于允许运行于独立环境或进程的程序安全、可靠地交换数据。文件系统通信作为一种经典的IPC方法,因其实现简单、跨平台兼容性好且数据可持久化,在非高频场景下具有重要技术价值。它尤其适用于需要将外部复杂计算环境(如配备丰富数据科学库的Python环境)与专用交易终端(如迅投QMT)集成的应用场景。通过约定文件路径与数据格式,外部程序可将包含交易指令的JSON信号文件写入特定目录,而交易终端通过轮询或监听机

weixin_28678151的博客 417

velocity模板引擎

Apache Velocity Project 官网Velocity Engine基础Velocity 模板引擎使用介绍

pscool的博客 675

从零到一:基于K375S主控的机械键盘优联无线化改造实战

本文详细记录了基于罗技K375S主控进行机械键盘优联无线化改造的全过程。从改造动机、核心原理与物料准备,到电路设计、PCB打样、焊接调试,逐步拆解了将优联技术集成到自定义机械键盘中的实战步骤。项目最终实现了低延迟、高稳定性且支持多设备连接的优联无线机械键盘,为DIY爱好者提供了高性价比的改造方案。

h0i1j2k3l的博客 600

Diebold-Mariano检验

给定两个预测的预测结果,我们希望比较他们的预测结果,以用于预测模型精度的比较。 Diebold-Mariano检验本质是一个t检验,用于检验替代预测的两个损失序列的平均值是否相等。即,它是一系列损失差的零均值的t检验。在存在自相关的情况下,它使用损失差分时间序列标准差的自相关一致性估计。 注意,在使用DM检验式时,假设损失序列是平稳的。 另外,DM检验在小样本数据时往往会拒绝零假设。对于小样本数据,推荐Harvey, Leybourne and Newbold (HLN)检验【1】; 参考文献 【1】htt

weixin_43948357的博客 6565

Velocity模板引擎

velocity简介 velocity介绍 Velocity是一个基于Java的模板引擎,可以通过特定的语法获取在java对象的数据,填充到模板中,从而实现界面和java代码的分离 应用场景 Web应用程序:作为为应用程序的视图,展示数据。 源代码生成 :velocity可用于基于模板生成Java源代码 自动电子邮件:网站注册,认证等的电子邮件模板 网页静态化:基于velocity模板,生成静态网页 velocity结构 Velocity主要分为app、context、runtime

Joker_DJ 6560

AUTOSAR从入门到精通-【应用篇】基于AUTOSAR架构的混合动力电池 ECU 软件开发

由于严峻的环境污染和能源短缺问题,各国都在致力于发展新能源车,以达到节能排放的目的。在此背景下,12V启停系统由于成本较低廉、匹配方便,得到广泛应用。但是12V系统作为启停系统后存在许多问题,比如节能和减排效果有限,并且轻度混合动力系统的功率需求通常在10~15KW,在此电压条件下运行时,电池的电流会达到1000A,因此该方案行不通。高压混合动力系统(>110V)的节油效果好,但是成本很高,并且需要大功率的电机。48V混合动力系统比高压混合动力系统成本。

getusushu的博客 1488

深入理解 Apache Velocity 模板语言中的条件判断

在介绍条件判断之前,我们需要了解什么是 Apache Velocity。Velocity 是一个基于 Java 的模板引擎,它通过将模板与数据结合,生成动态内容。简单易学高度灵活可与多种 Java 应用程序集成Apache Velocity 是一个非常强大的工具,掌握其条件判断的用法能够显著提升开发效率。在实际应用中,通过不断实践和探索,开发者可以发现更多潜在的使用场景和最佳实践。

私聊前往站内信:https://i.youkuaiyun.com/#/msg/chat/weixin_44976692 2万+

ABAP 大规模数据并行处理实战,六套 Parallel Processing Framework 如何选,性能调优真正该盯住什么

如果今天真的面对那份执行 14 个小时的生产报表,我不会马上把原来的 Loop 改成 50 个aRFC。我会先用 SAT、ST12、SQL Monitor 和 HANA 侧工具确认时间到底花在哪里。如果 90% 时间其实消耗在一条低效 SQL 上,Parallel Processing 只是让 50 个 Worker 同时执行那条低效 SQL,数据库会比原来更痛苦。应该先把串行逻辑本身优化到合理水平。该做 Set-based Processing 的地方先交给 HANA。该避免SELECT。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 149

python利用IQR方法与3σ方法进行异常值处理(含代码)

python利用IQR方法进行异常值处理

weixin_46713695的博客 2031
上一篇: 我们真的需要那么多功能吗? - 国外主流开源 CMS 功能评点
下一篇: 合格程序员每天每周每月每年应该做的事
SleepInDelphi
博客等级 码龄19年 32粉丝 388原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值