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





jsp是大家最熟悉的技术

长处:

1、功能强大,能够写java代码

2、支持jsp标签(jsp tag)

3、支持表达式语言(el)

4、官方标准。用户群广。丰富的第三方jsp标签库

5、性能良好。jsp编译成class文件运行。有非常好的性能表现

缺点:

jsp没有明显缺点,非要挑点骨头那就是。因为能够编写java代码,如使用不当easy破坏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不能实现的不太全面的特性清单:

(1)数字和日期支持

能够对不论什么数字类型进行算术运算和比較。包含精度类型

能够比較和显示(格式化)日期/时间值

(2)国际化 

依据各种内建和定制的数字格式,格式化本地敏感的数字

依据各种内建和定制的日期格式,格式化本地敏感和时区敏感的日期

标识(变量名)能够包括非英语字符,如重音字符、阿拉伯字符、中文字符等

(3)循环处理 

能够跳出循环

能够在循环外訪问循环体内的控制变量

能够測试是否达到最后一次循环

(4)模板级别的数组处理

能够使用类似[i]语法的索引方式訪问数组元素

能够查询数组长度

(5)宏 

宏能够有局部变量

能够递归调用宏,相同能够在模板的后面定义要调用的宏

调用宏时,能够按位置或名字的方式传递參数

宏參数能够有缺省值,使得在调用时忽略參数也有效

调用的宏可以有嵌套的体内容(<@myMacro>body</@myMacro>),可以在宏被调用时进行处理

宏是纯变量的,能够基于表达式来运行宏。或者作为參数传递给还有一个宏

(6)命名空间

能够对变量使用多命名空间。这对创建宏库非常重要,由于这能够避免应用程序中指定的变量和宏库中变量的名字冲突

(7)使用内建的函数/操作符维护Java无关的string、list和map

能够将字符串转换成大/小写、首字符大/小写。对HTML、XML或RTF进行转义处理,substring、split、查询字符串长度、find/replace子串等等

通过索引訪问list元素,获得子list。合并list。查询list长度。对list排序

通过key变量訪问map元素,检查map是否为空,获得key或值的list

(8)揭示模板中的错误

当訪问一个没有定义的变量,FreeMarker不会沉默;你能够配置FreeMarker来停止render模板显示错误信息,或者跳过错误部分;不管哪种。FreeMarker会记录问题(日志)

在写错指令名时。FreeMarker会抛出异常

(9)高级render控制

能够使用一组标记来封装模板的一块区域,以便在块区中全部要改动的地方应用HTML或XML转义(或其他使用FreeMarker表达式表示的转换)

FreeMarker有转换器。它们是模板的一块区域。在render时,通过转换过滤;内建的转换器包含空白字符压缩、HTML和XML转义。你能够实现自己的转换器;当然转换器能够嵌套

能够使用flush指令显式的flush输出

能够使用stop指令停止render

(10)文字

除了通常的字符串、数字和布尔值文字,也能够在模板中定义list和map文字

支持全部的Java转义文字:\b、\t、\n、\f、\r、\”、\’、\\,也支持\xXXXX使用UNICODE指定字符

(11)高级空白字符移除

FreeMarker坚持移除各行仅仅包括不输出FreeMarker标记的空白字符

对于明显要整修掉不须要的空白字符的指令来说,空白字符是个大问题

(12)集成其他技术

能够在模板中使用JSP标记库

能够直接在Pythonproject中使用

(13)强大的XML转换能力

在2.3版本号中,FreeMarker具有强大的新XML转换能力,使得替代XSLT成为可能

Velocity在这方面是无法真正竞争的。除非改进核心引擎。如支持宏库映射到名字空间,宏中支持局部变量

(14)高级模板元程序

能够捕获输出的不论什么部分到context变量中 

能够解释不论什么context变量。假设它是一个模板定义

上述两者的结合使用

jsp,velocity,freemark页面引擎的比較的更多相关文章

  1. 「快学springboot」SpringBoot整合freeMark模板引擎

    前言 虽然现在流行前后端分离开发和部署,但是有时候还是需要用到服务端渲染页面的.比如:需要考虑到SEO优化等问题的时候,FreeMark其实还是很有作用的.本人的博客本来是用React开发的,但是后来 ...

  2. freemark页面中获取list循环中的counter

    如何在freemark页面中获取到当前list循环的counter 直接上代码 <#list lists as x> <#assign j=x?counter> ${j} // ...

  3. servlet+jsp update修改页面的实现,整整搞了两个小时才搞定

    package DAO; public class books { private int bid; private String bname; private int booksl; private ...

  4. 新手详解JAVA+数据库+JSP完成简单页面

    本篇以数据库添加为例(本例中数据库名为“xinxi”表单名字为“stud”) 准备---实体层: package entity; public class Student { private Stri ...

  5. SpringMVC同时支持多视图(JSP,Velocity,Freemarker等)的一种思路实现

    在基于SpringMVC的项目中有时需要同时使用多种视图格式,如jsp,velocity及freemarker等,通过不同的请求路径配置规则,映射到不同的视图文件.下面我提供一种思路,通过视图模板文件 ...

  6. fastDFS shiro权限校验 redis FreeMark页面静态化

    FastDFS是一个轻量级分布式文件系统,   使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传.下载等服务   FastDFS服务端有两个角色:跟踪器(tracker)和存储节点( ...

  7. Eclipse创建的Java Web项目,如何启用外置浏览器访问jsp或者html页面

    当我们用Eclipse创建了一个Java Web项目,想访问一个jsp或者html页面时,通常会在目标页面(以jsp为例)上点击鼠标右键,选择[Run As]——>[Run on Server] ...

  8. freemark 页面静态化

    1. 页面静态化是什么? 页面静态化有非常多含义,在WEB开发中.静态网页一般理解为站点中大部分超级链接所引用的页面是单独的HTML静态页面文件(如.htm..html等页面文件,html语言本身是静 ...

  9. springmvc 配置多视图,返回jsp,velocity,freeMarker,tiles(模板)等等

    springmvc-servlet.xml配置 <!-- Velocity --> <bean id="velocityViewResolver" class = ...

随机推荐

  1. 通过机智云APP来学习安卓

    效果非常之好,安卓6.0之后就进行了动态授权.按照网上的视频一步一步调试的非常成功,非常舒服.

  2. Dota2团战实力蔑视人类,解剖5只“AI英雄”

    去年,OpenAI 在 DOTA 的 1v1 比赛中战胜了职业玩家 Dendi,而在距离进阶版 OpenAI Five 系统战胜人类业余玩家不过一个月的时间,今天凌晨,它又以 2:1 的战绩再次完成对 ...

  3. android studio 的Error:No such property: packageApplicationTask for class: com.android.build.gradle.internal.variant.ApkVariantOutputData解决方法

    出现这个原因是安装了jrebel热部署插件,在projectStructure中的projec选项中,android 插件源仓会有热部署的配置.将jcenter后的配置全部删除就可以 注:本人只安装了 ...

  4. Linux 软件编译、安装、删除

    本文学习内容 手动安装软件 手动安装下载源码的软件 源码编译3步骤 deb包-包依赖管理 dekg -l 查看所以安装deb的包 apt-get仓库安装(自动处理依赖问题) 640?wx_fmt=gi ...

  5. netstat查看服务器连接数端口并发数

    简介 Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Member ...

  6. CAD在网页中绘图,并为新绘的对象写扩展数据和读取扩展数据

    在网页中绘图,并为新绘的对象写扩展数据和读取扩展数据.下面帮助的完整例子,在控件安装目录的 Sample\Ie\iedemo.htm 中. 主要用到函数说明: _DMxDrawX::InsertBlo ...

  7. spring aop 方法增加日志记录

    使用场景: 1:调用外部接口时需要记录出参和入参. 2:分布式系统之间,调用各个系统之间需要记录日志,一旦出现了问题也可以找得到元数据 一言不合,上代码: # 枚举类 package xxxxxxxx ...

  8. 并查集(Union Find)的基本实现

    概念 并查集是一种树形的数据结构,用来处理一些不交集的合并及查询问题.主要有两个操作: find:确定元素属于哪一个子集. union:将两个子集合并成同一个集合. 所以并查集能够解决网络中节点的连通 ...

  9. 由杭州开往成都的K529次列车

    春运期间,在由杭州开往成都的K529次列车上,旅客严重超员.一个靠窗坐着的老大爷正跟邻座的人分享他的幸运经历,原来,他是到上饶的,买的是无座票,上车后抱着侥幸心理事先占了个好座,没想到直到开车也没人上 ...

  10. ExtJs如何判断form表单是否被修改过详解

    1.Extjs表单提交主要有三种方式: 1, EXT的form表单ajax提交(默认提交方式)      相对单独的ajax提交来说优点在于能省略写参数数组 ,form.getForm().submi ...