- 浏览: 7340767 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (1546)
- 企业中间件 (236)
- 企业应用面临的问题 (236)
- 小布Oracle学习笔记汇总 (36)
- Spring 开发应用 (54)
- IBatis开发应用 (16)
- Oracle基础学习 (23)
- struts2.0 (41)
- JVM&ClassLoader&GC (16)
- JQuery的开发应用 (17)
- WebService的开发应用 (21)
- Java&Socket (44)
- 开源组件的应用 (254)
- 常用Javascript的开发应用 (28)
- J2EE开发技术指南 (163)
- EJB3开发应用 (11)
- GIS&Mobile&MAP (36)
- SWT-GEF-RCP (52)
- 算法&数据结构 (6)
- Apache开源组件研究 (62)
- Hibernate 学习应用 (57)
- java并发编程 (59)
- MySQL&Mongodb&MS/SQL (15)
- Oracle数据库实验室 (55)
- 搜索引擎的开发应用 (34)
- 软件工程师笔试经典 (14)
- 其他杂项 (10)
- AndroidPn& MQTT&C2DM&推技术 (29)
- ActiveMQ学习和研究 (38)
- Google技术应用开发和API分析 (11)
- flex的学习总结 (59)
- 项目中一点总结 (20)
- java疑惑 java面向对象编程 (28)
- Android 开发学习 (133)
- linux和UNIX的总结 (37)
- Titanium学习总结 (20)
- JQueryMobile学习总结 (34)
- Phonegap学习总结 (32)
- HTML5学习总结 (41)
- JeeCMS研究和理解分析 (9)
最新评论
-
lgh1992314:
[u][i][b][flash=200,200][url][i ...
看看mybatis 源代码 -
尼古拉斯.fwp:
图片根本就不出来好吧。。。。。。
Android文件图片上传的详细讲解(一)HTTP multipart/form-data 上传报文格式实现手机端上传 -
ln94223:
第一个应该用排它网关吧 怎么是并行网关, 并行网关是所有exe ...
工作流Activiti的学习总结(八)Activiti自动执行的应用 -
ZY199266:
获取不到任何消息信息,请问这是什么原因呢?
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息 -
xiaoyao霄:
DestinationSourceMonitor 报错 应该导 ...
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息
基于 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获取模板文件,得到模板引用:
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提供了一个简单的模板语言,供前端网页制作人员使用,这个模板语言简单到大部分懂得javascript的人都可以很快掌握,其甚至比javascript更简单。
当然这种简单是刻意的,因为不需要Velocity什么都能完成,而只需专注于其应该完成的。View层不应该包含更多的逻辑,Velocity的简单模板语法完全可以满足所有对页面显示逻辑的需要,并且也不会发生像JSP那样因为一个无限循环语句而毁掉系统的情况。
Velocity是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。 当Velocity应用于web开发时,界面设计人员可以和java程序开发人员同步开发一个遵循MVC架构的web站点,也就是说,页面设计人员可以只 关注页面的显示效果,而由java程序开发人员关注业务逻辑编码。Velocity将java代码从web页面中分离出来,这样为web站点的长期维护提 供了便利,同时也为我们在JSP和PHP之外又提供了一种可选的方案。 Velocity的能力远不止web站点开发这个领域,例如,它可以从模板(template)产生SQL和PostScript、XML,它也可以被当 作一个独立工具来产生源代码和报告,或者作为其他系统的集成组件使用。Velocity也可以为Turbine web开发架构提供模板服务(template service)。Velocity+Turbine提供一个模板服务的方式允许一个web应用以一个真正的MVC模型进行开发。
Velocity的Eclipse插件的Update地址是:http://propsorter.sourceforge.net/veloeclipse
Velocity 的 JavaDoc: http://www.oschina.net/uploads/doc/velocity-1.5/index.html
发表评论
-
[转]Jython初探
2014-01-07 11:19 2410转载自: ... -
ireport导出各种格式(pdf,excel,word,html,print)
2013-05-02 16:59 10052import java.io.IOException; ... -
【转】使用Atomikos Transactions Essentials实现多数据源JTA分布式事务
2013-04-03 12:11 6795Atomikos数据源配置方法有三种 Atomikos数 ... -
【转】Apache Thrift入门1-架构&介绍
2013-04-02 13:26 2042Thrift 是什么? Thrift ... -
【转】Thrift入门及Java实例演示
2013-04-02 12:47 2588目录: 概述 下载配置 基本概念 数据类型 ... -
【转】Thrift入门试用
2013-04-02 12:39 2185在新的项目中公司在平台内部系统间使用Thrift通讯,都没 ... -
【转】thrift的安装
2013-04-02 12:38 2094一、ubuntu下thrift的安装 1.下载源代码 ... -
GIS的学习(二十五)geoserver wms中的各种操作API详细讲解和使用
2012-09-10 17:42 9710官方geoserver中WMS服务中几种操作的API的详细说明 ... -
POI3.8组件研究(九)----让POI架起Java与Office之间的桥梁
2012-06-17 14:37 4333本文将阐述如何用POI来读取/写入完整的Excel文 ... -
POI3.8组件研究(八)--基于SXSSF (Streaming Usermodel API)的写文件
2012-06-17 14:17 14438在POI3.8中SXSSF仅仅支持excel2 ... -
POI3.8组件研究(七)--基于XSSF and SAX (Event API)事件的解析
2012-06-17 14:00 5369针对Event API事件解析仅仅支持excel97~ ... -
POI3.8组件研究(六)---struts2.0 视图层文件页面点击导出
2012-06-17 13:23 2420在struts2.0中点击导出按钮将信息导出为exce ... -
POI3.8组件研究(五)---excel文件内容抽取为文本
2012-06-15 09:15 4368在一个搜索引擎的使用中需要将各种文件转化为文本 ... -
POI3.8组件研究(四)--Event API (HSSF Only)事件的解析
2012-06-14 17:37 9065通过eventusermodel读取文件 ... -
POI3.8组件研究(二)---基于User API (HSSF and XSSF)解析Excel2003和2007文件
2012-06-14 09:46 3219在解析生成excel2003和 ... -
POI3.8组件研究(一)---基于User API (HSSF and XSSF)解析Excel2003和2007文件
2012-06-14 09:29 5356在以前的Excel解析时候,我们通常需要编写Ex ... -
EasyPOI的使用
2012-02-12 17:06 5322EasyPOI 的目的是封装了poi的写excel的API。 ... -
Commons-net FTPClient上传下载的封装
2011-08-25 08:30 11513在项目中使用到FTP功能,于是采用类似Spri ... -
Java将第三方jar文件打包到一个jar中的插件(fatjar)
2011-08-19 22:17 4340<!-- google_ad_section_star ... -
Apache的Commons-configuration自动加载特性
2011-07-24 19:04 4085在一些项目可能配置文件经常变化,配置文件的类型可能 ...
相关推荐
在IT行业中,Velocity是一个强大的模板引擎,常用于生成动态内容,比如HTML页面、电子邮件模板定制等。本篇文章将深入探讨如何...通过深入研究源码和利用相关工具,我们可以更有效地利用Velocity来满足各种定制需求。
2. **创建Velocity上下文**:将数据模型放入Velocity Context,这是Velocity模板引擎工作的地方。 3. **加载模板**:读取模板文件并将其加载到Velocity引擎中。 4. **渲染模板**:使用上下文中的数据渲染模板,生成...
【标题】"使用Velocity Swing制作的代码生成工具"是一个基于Java Swing UI框架和Velocity模板引擎开发的代码自动化生成工具。这个工具旨在帮助开发者快速生成符合特定模式的代码,减轻重复劳动,提高开发效率。 ...
** Velocity 模板引擎配置详解 ** Velocity 是一个开源的 Java 模板引擎,它允许开发者将业务逻辑与页面展示分离,使得 HTML 页面更专注于布局和设计,而将动态数据处理交由后端代码处理。Velocity 通过使用简单的...
标题中的"Eclipse 4.5 & velocity"指出我们要探讨的是两个关键的软件开发工具:Eclipse IDE的4.5版本,以及Velocity模板引擎。这两者在IT领域中都有其独特的应用和重要性。 Eclipse 4.5,也被称为Mars版本,是...
- 对于大量数据的处理,考虑使用模板引擎,如 FreeMarker 或 Velocity,它们能更好地处理动态内容的生成。 总之,Java 通过模板生成 Word 文档是一个涉及文件操作、文本处理和格式转换的过程。合理利用 Apache POI...
Velocity是一款基于Java的模板引擎,它允许开发者将HTML页面设计与业务逻辑分离,使得非程序员也可以参与到网站的页面制作中。Velocity在Web应用开发中扮演着重要角色,尤其对于那些希望将视图层与后端代码分离的...
【标题】:“利用Freemarker制作的Diamante生成器”是基于模板引擎技术的代码自动化生成工具。它借助Freemarker的灵活性和强大的表达能力,可以高效地生成符合特定结构或模式的代码,减轻了程序员手动编写重复性代码...
- **Java批量邮件发送**:利用Apache Velocity模板引擎实现邮件内容的动态生成,提高了邮件发送的灵活性和效率。 - **负载均衡下的排程管理**:解决了在多服务器环境中如何有效地控制定时任务的问题,保证了系统的...
代码生成器的核心是模板引擎,例如Freemarker、Velocity和Thymeleaf等。模板引擎允许我们将静态模板与动态数据结合,通过特定的语法来填充模板,生成最终的代码文件。以Freemarker为例,我们可以使用三元表达式(如$...
代码生成工具是一种高效开发辅助软件,它能够自动化地...通过理解数据库表结构,学习Velocity模板语言,以及熟悉工具的配置文件,开发者可以充分利用这个工具提高开发效率,减少重复劳动,专注于更高层次的业务创新。
`Velocity` 是 Apache 软件基金会的一个开源项目,它是一个基于 Java 的模板引擎,用于将模板语言与 Java 代码分离,使得非程序员(如网页设计师)也能参与到动态网页的制作中。Velocity 使用简单的 `#set` 和 `#if`...
它整合了众多其他开源项目,如Freemarker和Velocity模板引擎,OGNL表达式语言等,增强了对业务逻辑的控制和视图的分离。 3. **FusionCharts动态报表**:FusionCharts是一款JavaScript图表库,可以生成交互式的、...
- **视图层(V)**:在视图层,框架使用了Velocity模板引擎。Velocity允许开发者编写动态HTML页面,将数据和展示逻辑分离。 - **Velocity页面显示模板制作**:Velocity模板语言简洁,通过$variable或#{expression}...
前端页面方面,我们可以利用JFinal内置的Freemarker或Velocity模板引擎来生成HTML。创建投票页面,展示投票主题和选项,提供投票按钮;同时,也需要一个结果页面,展示各选项的得票情况。此外,还需要考虑到错误提示...
6. **Freemarker和Velocity模板**: Struts2支持使用Freemarker和Velocity作为视图层的模板引擎,方便开发者创建动态HTML页面。 7. **OGNL(Object-Graph Navigation Language)**: Struts2默认的表达式语言,用于在...
2. **插件支持**:Struts2.3.8增加了对更多插件的支持,如Freemarker和Velocity模板引擎,以及各种验证框架的集成。 3. **安全更新**:此版本包含了重要的安全修复,比如修复了可能导致远程代码执行的漏洞,提高了...