在java领域,表现层技术主要有三种:jsp、freemarker、velocity。

jsp是大家最熟悉的技术
优点:
1、功能强大,可以写java代码
2、支持jsp标签(jsp tag)
3、支持表达式语言(el)
4、官方标准,用户群广,丰富的第三方jsp标签库
5、性能良好。jsp编译成class文件执行,有很好的性能表现
缺点:
jsp没有明显缺点,非要挑点骨头那就是,由于可以编写java代码,如使用不当容易破坏mvc结构。

velocity是较早出现的用于代替jsp的模板语言
优点:
1、不能编写java代码,可以实现严格的mvc分离
2、性能良好,据说比jsp性能还要好些
3、使用表达式语言,据说jsp的表达式语言就是学velocity的
缺点:
1、不是官方标准
2、用户群体和第三方标签库没有jsp多。
3、对jsp标签支持不够好

freemarker
优点:
1、不能编写java代码,可以实现严格的mvc分离
2、性能非常不错
3、对jsp标签支持良好
4、内置大量常用功能,使用非常方便
5、宏定义(类似jsp标签)非常方便
6、使用表达式语言
缺点:
1、不是官方标准

2、用户群体和第三方标签库没有jsp多

选择freemarker的原因:
1、性能。velocity应该是最好的,其次是jsp,普通的页面freemarker性能最差(虽然只是几毫秒到十几毫秒的差距)。但是在复杂页面上(包含大量判断、日期金额格式化)的页面上,freemarker的性能比使用tag和el的jsp好。
2、宏定义比jsp tag方便
3、内置大量常用功能。比如html过滤,日期金额格式化等等,使用非常方便
4、支持jsp标签
5、可以实现严格的mvc分离

=====================================================================================================

相比较 FreeMarker 而言,Velocity 更加简单、轻量级,但它的功能却没有 FreeMarker 那么强大。

对于大部分的应用来说,使用 FreeMarker 比 Velocity 更简单,因为 Velocity 还必须编写一些自定义的toolbox类以及一遍遍重复的编写一些比较通用的模版代码,因此也就丧失了刚开始开发时更多的宝贵时间。另外使用工具类和变通的方法在模版引擎中似乎不是一个非常有效的做法。同时,Velocity 的做法使得在Velocity的模版中大量的跟 Java 对象进行交互,这违反了简单的原则,尽管你也可以将代码转入控制器中实现。当然,如果你像使用 Velocity 一样来使用 FreeMarker ,那么 FreeMarker 也可以跟 Velocity 一样简单。

Velocity 一个优于 FreeMarker 的地方在于它有很广泛的第三方支持以及一个非常庞大的用户社区,你可以通过这个社区获得到很多的帮助,相反的 FreeMarker 在这方面要差很多。当然,也有越来越多的第三方软件开始在支持 FreeMarker 。

下面是一些 FreeMarker 能做到的,而 Velocity 做不到的功能列表(且看着):

1. 日期和数字的支持
您可以执行运算和比较,对任意数量的类型,包括任意精度类型,而不仅仅是整数。
您可以比较和显示(格式化)日期/时间值。

2. 国际化
您可以格式数字区域,各种各样的内置和自定义数字格式模式。
您可以格式日期地区和时区,各种各样的内置和定制的日期格式模式。
标识符(变量名)可以包含非英语字母一样重音字母,阿拉伯字母,汉字等

3. 循环处理
您可以退出循环
您可以访问控制变量外循环机构的内部循环
您可以得知当前是否到了循环的结束位置

4. 模版级别的数组处理
您可以使用[i]的语法来访问数组元素,包括原始的和非原始的指数
可以获取到数组的长度

5. 宏定义
宏调用可以通过位置或名称进行参数传递
宏的参数可以设定默认值,在调用宏时如果没有指定该参数,则使用默认值代替
通过 <@myMacro>body</@myMacro> 可以支持宏的嵌套
可以通过文本表达的“宏的名称”来直接调用某个宏
宏允许先使用再定义
宏可以定义局部变量(新版本的Velocity也通过#local指令来实现该功能,尽管官方的文档还没有进行介绍)

6. 命名空间
您可以使用多个名称空间的变数。当您建立“宏库”时是非常有用的 ,因为可以防止名称冲突与申请特定变量或与其他宏变量的库。

7. 内置与 Java 语言无关的字符串、列表、Map 的操作方法

8. 能提示模版中的拼写错误以及其他错误
当访问一个不存在的变量时,FreeMarker 在执行该模版时会报错,通过配置,你可以指定 FreeMarker 在碰到此类错误时是停止执行,还是忽略该错误,同时 FreeMarker 会在日志中记录此问题;
如果您输入错误指令的名称,FreeMarker将抛出一个异常。

9. 更高级的文本输出工具
You can enclose a block of template in a set of tags that will cause it to apply HTML escaping or XML escaping (or any other transformation you can express as a FreeMarker expression for that matter) on all interpolations (${foo}) in the block.
FreeMarker has transforms, which are blocks of template that when rendered, go through a transforming filter. Built-in transforms include whitespace compressor, HTML and XML escaper. Best of all, you can implement your own transformers as well (i.e. if you generate Java source code, you can write a Java code pretty-printer transform and insert it into the template). Naturally, transforms can be nested.
You can explicitly flush the output writer with a built-in flush-directive.
You can stop the rendering with a built-in stop-directive.

10. 文本处理
支持Java的特殊字符处理,例如\b\t\n\f\r\"\'\\,以及UNICODE的\xXXXX
除了通常的字符串,数字,和布尔常量您可以定义列表和地图文字以及内部模板

11. 高级的空格清除
FreeMarker 将删除一些多余的空格、跳格、换行等字符,从而消除一些令人厌烦的明显多余的空格
FreeMarker 也提供指令来删除多于的空格

12. 与其他技术的集成
提供 JSP 标签库以便在 JSP 中嵌入 FreeMarker 模版
可以直接跟 Python 对象一起工作

13. 更强大的XML转换功能

14. 先进的模板元程序
您可以捕捉到输出的任意部分范本背景变量
您可以任意解释的范围变量,就好像它是一个模板定义

结束语:

功能强不强大并不是最重要的,关键在于是否适应你的要求。

Java模版引擎:jsp、freemarker、velocity区别的更多相关文章

  1. Java模版引擎之Freemarker

    Java模版引擎之Freemarker freemarker是一款模版引擎,是一种基于模版生成静态文件的通用工具,它是为Java程序员提供的一个类库,它不是面向最终用户的,而是为程序员提供了一款可以嵌 ...

  2. JSP FreeMarker Velocity 原理

    JSP原理 JSP的运行原理:JSP 本质上是一个Servlet. 每个JSP 页面在第一次被访问时,JSP引擎将它翻译成一个Servlet 程序,然后再把这个 Servlet 源程序编译成Servl ...

  3. Java模板引擎之Freemarker

    Freemarker定义: 一款模板引擎 Freemarker是一个web图层组件不是web框架,解析服务端数据到页面 小例子: <#list 集合 as item> list标签对集合进 ...

  4. Java模板引擎之Freemarker 学习笔记 一

    什么是Freemarker Freemarker是模板引擎,不是Web框架,只是视图层的组件,官网是 https://freemarker.apache.org/ Freemarker原理 数据模型+ ...

  5. Java模板引擎之freemarker简介

  6. Spring Boot 集成 thymeleaf 模版引擎

    Spring Boot 建议使用 HTML 来完成动态页面.Spring Boot 提供了大量的模版引擎,包括 Thymeleaf.FreeMarker.Velocity等. Spring Boot ...

  7. Springboot 系列(五)Spring Boot web 开发之静态资源和模版引擎

    前言 Spring Boot 天生的适合 web 应用开发,它可以快速的嵌入 Tomcat, Jetty 或 Netty 用于包含一个 HTTP 服务器.且开发十分简单,只需要引入 web 开发所需的 ...

  8. java官网门户源码 SSM框架 自适应-响应式 freemarker 静态模版引擎

    来源:http://www.fhadmin.org/webnewsdetail3.html 前台:支持(5+1[时尚单页风格])六套模版,可以在后台切换 官网:www.fhadmin.org 系统介绍 ...

  9. Java模板引擎 FreeMarker

    @(编程) [TOC] 1. 简介 FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写.它是为Java程序员提供的一个开发包.它不是面向最终用户的,而是为程序员 ...

随机推荐

  1. 测试 js 方法运行时间

    早期测速的时候是这样的,呵呵呵,一开始还挺爽的 function testFunctionTime(fn) { var start = new Date().getTime(); if (fn) fn ...

  2. ubuntu下make无法安装的问题

    发布时间:2015-10-30 10:51:30来源:linux网站作者:_莫欺少年穷 在帮同学服务器安装环境过程中,发现,make 命令不能使用,提示: The program 'make' is ...

  3. 前端常用js脚本

    常用js整理 //获取Url中的参数值 function getQueryString(name) { var reg = new RegExp("(^|&)" + nam ...

  4. Hadoop程序基础模板

    分布式编程相对复杂,而Hadoop本身蒙上大数据.云计算等各种面纱,让很多初学者望而却步.可事实上,Hadoop是一个很易用的分布式编程框架,经过良好封装屏蔽了很多分布式环境下的复杂问题,因此,对普通 ...

  5. 2017最全的php面试题目及答案总结

    最近在网上看到很多的小伙伴们都在询问如何应对php面试,这个对于有工作经验和实战项目的小伙伴来说是没什么问题的,但是对于刚刚学习完php的小伙伴们.php面试却是一个很重要的一步,那么今天php中文网 ...

  6. 20165101刘天野 2017-2018-2 《Java程序设计》第5周学习总结

    #20165101刘天野 2017-2018-2 <Java程序设计>第5周学习总结 教材学习内容总结 第七章:内部类与异常类 内部类(nested classes),面向对象程序设计中, ...

  7. iOS_UIAlertController

    ViewController.m文件 #import "ViewController.h" @interface ViewController () // @property (n ...

  8. AJAX跨域资源共享 CORS 详解

    CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing). 它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从 ...

  9. HBase协处理器的使用(添加Solr二级索引)

    给HBase添加一二级索引,HBase协处理器结合solr 代码如下 package com.hbase.coprocessor; import java.io.IOException; import ...

  10. spring boot: 计划任务@ EnableScheduling和@Scheduled

    spring boot: 计划任务@ EnableScheduling和@Scheduled @Scheduled中的参数说明 @Scheduled(fixedRate=2000):上一次开始执行时间 ...