jsp、freemarker、velocity 优缺点对比与FreeMarker的介绍

在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、使用表达式语言

freeMarker则是提前根据模板生成好html的静态页面,这样在访问时,直接访问到的就是一个静态页面,这个就是效率问题了,不过freeMarker适合用变化不大,但是内容很多的网页。
缺点:
1、不是官方标准
2、用户群体和第三方标签库没有jsp多

选择freemarker的原因:
1、性能。velocity应该是最好的,其次是jsp,普通的页面freemarker性能最差(虽然只是几毫秒到十几毫秒的差距)。但是在复杂页面上(包含大量判断、日期金额格式化)的页面上,freemarker的性能比使用tag和el的jsp好。
2、宏定义比jsp tag方便
3、内置大量常用功能。比如html过滤,日期金额格式化等等,使用非常方便
4、支持jsp标签
5、可以实现严格的mvc分离首先,我们先来认识一下freeMarker。 FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java 文等。 
简单了解了FreeMarker之后,现在就来讲讲FreeMarker的优点和缺点。

(一) FreeMarker的优点

1.很好地分离表现层和业务逻辑。

JSP功能很强大,它可以在前台编写业务逻辑代码,这也带来了一个弊端——页面内容凌乱,可读性差,这将会大大增加后期的维护难度。而FreeMarker很单纯,仅仅负责页面表现,而去掉了繁琐的逻辑代码。 
FreeMarker的原理就是:模板+数据模型=输出,模板只负责数据在页面中的表现,不涉及任何的逻辑代码,而所有的逻辑都是由数据模型来处理的。用户最终看到的输出是模板和数据模型合并后创建的。

2. 提高开发效率。

众所周知,JSP在第一次执行的时候需要转换成Servlet类,之后的每次修改都要编译和转换。这样就造成了每次修改都需要等待编译的时间,开发效率低下。 
而FreeMarker模板技术并不存在编译和转换的问题,所以就不会存在上述问题。相比而言,使用freeMark可以提高一定的开发效率

3.明确分工。

jsp页面前后端的代码写到了一起,耦合度很高,前台的需要熟悉后台环境,需要去调试。而让后台的不熟悉界面设计技术。对两者而言,交替性的工作需要花费一定的学习成本,效率低下。 
使用FreeMarker后,前后端完全分离,大家各干各的,互不影响。

4、简单易用,功能强大

freeMark支持jsp标签,宏定义比jsp tag方便。同时内置了大量常用功能,比如html过滤,日期金额格式化等等。功能代码十分简洁,上手快,使用非常方便。

(二)FreeMarker的缺点

1.应用FreeMarker模板技术,在修改模板后,可能会出现无法及时生成html,会看到已经过期数据的情况。

2.FreeMarker模板技术在应用过程中,FreeMarker中的变量必须要赋值,如果不赋值,那么就会抛出异常。

3.FreeMarker的map限定key必须是string,其他数据类型无法操作。

4.FreeMarker不支持集群应用。为了编成的方便性,把序列化的东西都放到了Session中,如Session,request等,在开发的过程中确实方便,但如果将应用放到集群中,就会出现错误。

总的来说,freemarker优势还是很大的,关于它的缺点,特别是关于空值赋值的限制,有着相应的解决方案。可以看看我的其他博文。 
最后关于性能方面,普通的页面freemarker性能相对于jsp(虽然只是几毫秒到十几毫秒的差距)。但是在复杂页面上(包含大量判断、日期金额格式化)的页面上,freemarker的性能比使用tag和el的jsp好。

猜你喜欢

转载自blog.csdn.net/Rucimeili/article/details/81327955