jsp,velocity,freemark页面引擎的比较

在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不能实现的不太全面的特性清单:

(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标记库

可以直接在Python工程中使用

(13)强大的XML转换能力

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

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

(14)高级模板元程序

可以捕获输出的任何部分到context变量中

可以解释任何context变量,如果它是一个模板定义

上述两者的结合使用

时间: 2024-08-17 14:10:29

jsp,velocity,freemark页面引擎的比较的相关文章

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

前言 虽然现在流行前后端分离开发和部署,但是有时候还是需要用到服务端渲染页面的.比如:需要考虑到SEO优化等问题的时候,FreeMark其实还是很有作用的.本人的博客本来是用React开发的,但是后来发现搜索引擎难以收集由JS渲染的页面,所以前段时间,是用jQuery+FreeMark重写了我的博客前端页面.感兴趣的朋友,可以点击下面的查看更多的链接跳转至本人的博客. 在springboot中,不推荐使用JSP(其实任何项目都不推荐使用JSP),而是推荐使用模板引擎,如FreeMark.其实使用

SpringMVC同时支持多视图 JSP Velocity Freemarker等 的一种思路实现

第一种方式: 在基于SpringMVC的项目中有时需要同时使用多种视图格式,如jsp,velocity及freemarker等,通过不同的请求路径配置规则,映射到不同的视图文件.下面我提供一种思路,通过视图模板文件后缀名的方式来进行处理.例如: @RequestMapping(value = "/hello") public String jspTest(HttpServletRequest request, ModelMap map) { return "demo.jsp&

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

package DAO; public class books { private int bid; private String bname; private int booksl; private double price; public int getBid() { return bid; } public void setBid(int bid) { this.bid = bid; } public String getBname() { return bname; } public v

JSP简单练习-页面重定向

在JSP程序设计中,经常要进行页面的重定向,如在页面程序中加入判断语句即满足条件就转向某页面,不满足条件则转向另一个页面. 下面是一个简单的例子: <%@ page contentType="text/html; charset=gb2312" %> <html> <body> <% // 页面重定向程序片 String url; url=request.getParameter("goaddress"); if(url!=

1.jsp 从当前页面跳转到另一页面 (含有使用JavaScript、servlet 的跳转页面的方法)

使用JSP跳转页面常见的有两种方式 1.转发:forward   使用执行请求转发的动作标识<jsp:forword> <jsp:forward page="6-5-login.jsp"></jsp:forward> 2.重定向   redirect 使用response对象的sendRedirect()方法 <% response.sendRedirect("jsp/login.jsp"); %> 重定向操作支持将地

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

本篇以数据库添加为例(本例中数据库名为"xinxi"表单名字为"stud") 准备---实体层: package entity; public class Student { private String name; private String adress; private String qq; public void setName(String name) { this.name=name; } public String getName() { retur

jsp——java服务页面

1 Jsp基础 1.1 什么是JSP? JSP,Java Server Page    Java服务页面. html页面: 用html语言写页面 Jsp页面: 用html语言写页面,用java语言写业务逻辑 Jsp的特点: 既可以写html代码,也可以写java代码. 1.2 Jsp的作用 Jsp的主要作用是用java语言来开发动态资源的技术. 1.3 Jsp的运行 servlet: servet程序交给tomcat服务器运行 Jsp:jsp页面交给tomcat服务器运行. jsp在%tomca

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

springmvc-servlet.xml配置 <!-- Velocity --> <bean id="velocityViewResolver" class = "org.springframework.web.servlet.view.velocity.VelocityViewResolver"> <property name="order" value="0" /> <prope

JSP Java服务器页面

大家好!好久不见!今日我们开始学习JSP了,一些记录基础性的知识在这里与大家分享. 先说下URL(Uniform Resource Locator 同意资源定位符). URL包括传输协议(http://),ip地址,端口(端口如果是80可以省略,其他不能省略),项目资源地址. 再来说下B/S,C/S架构. B/S是浏览器/服务器: 浏览器和服务器端采用请求/相应模式进行交互: B/S结构是对C/S结构的一种改进: 当应用成武为B/S结构时,程序部署在应用服务器上,并通过应用服务器同数据库服务器进