现在我们的计算机发展很是迅速,一般的朋友可能只知道利用电脑现成的软件进行娱乐或者工作,并不是很了解软件的开发是需要一个很长时间的过程,并且需要很多的人花时间去写程序。对计算机稍微有点了解的朋友就知道,一个程序的开发需要一个适应的开发运行环境,并且需要很多的数据兼容工具,比如说java模板引擎,这个是必不可少的,不然我们就无法正常进行工作。FreeMarker.jar是一款功能强大并且完全免费的java模板引擎,简单的说就是一种基于模板和要改变的数据,并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具,它的出现主要是为了解决Struts2当中缺少freemarker.jar的问题。它不是为最终用户设计的,而是一个Java类库,一个程序员可以嵌入到他们开发的产品中的组件,也就是说这个就跟一个工具组件一样,与其它软件配合使用。它是用Java语言编写的,主要用于MVC中的视图层,生成HTML显示数据给客户端,可以完全替代JSP。软件是独立于Web容器,也就是说,它在Web运行时不知道servlet或HTTP,它不仅可以用作表示层的实现技术,还可以生成Java编程语言等。软件拥有一个非常强大的模板语言数据库,能够提供许多有用的和常用的指令标记,并且可以生成HTML、XML、RTF、Java源代码等,功能上可以说是非常全面了,专业性也极强,非常适合从事于程序开发的工作人员使用。本次小编带来的是免费版,欢迎需要的朋友来本站免费下载体验!~
能够生成各种文本:HTML、XML、RTF、Java源代码等等;
易于嵌入到你的产品中:轻量级;不需要Servlet环境;
插件式模板载入器:可以从任何源载入模板,如本地文件、数据库等等;
你可以按你所需生成文本:保存到本地文件;作为Email发送;从Web应用程序发送它返回给Web浏览器。
2、强大的模板语言
所有常用的指令:include、if/elseif/else、循环结构;
在模板中创建和改变变量;
几乎在任何地方都可以使用复杂表达式来指定值;
命名的宏,可以具有位置参数和嵌套内容;
名字空间有助于建立和维护可重用的宏库,或者将一个大工程分成模块,而不必担心名字冲突;
输出转换块:在嵌套模板片段生成输出时,转换HTML转义、压缩、语法高亮等等;你可以定义自己的转换。
3、通用数据模型
不是直接反射到Java对象,Java对象通过插件式对象封装,以变量方式在模板中显示;
你可以使用抽象(接口)方式表示对象(JavaBean、XML文档、SQL查询结果集等等),告诉模板开发者使用方法,使其不受技术细节的打扰。
4、为Web准备
在模板语言中内建处理典型Web相关任务(如HTML转义)的结构;
能够集成到Model2 Web应用框架中作为JSP的替代;
支持JSP标记库;
为MVC模式设计:分离可视化设计和应用程序逻辑;分离页面设计员和程序员。
5、智能的国际化和本地化
字符集智能化(内部使用UNICODE);
数字格式本地化敏感;
日期和时间格式本地化敏感;
非US字符集可以用作标识(如变量名);
多种不同语言的相同模板。
6、强大的XML处理能力
<#recurse> 和<#visit>指令(2.3版本)用于递归遍历XML树;
在模板中清楚和直觉的访问XML对象模型;
开源论坛JForum就是使用了FreeMarker做为页面模板。
页面中的用户名(即上面的“Big Joe”)是登录这个网页的访问者的名字, 并且最新产品的数据应该来自于数据库才能随时更新。所以,不能直接在HTML页面中输入“Big Joe”、“greenmouse”及链接, 不能使用静态HTML代码。可以使用要求输出的模板来解决,模板和静态页面是相同的,只是它会包含一些程序将它们变成动态内容的指令:
模板文件存放在Web服务器上,当有人来访问这个页面,程序就会介入执行,然后动态转换模板,用最新的数据内容替换模板中${...}的部分,之后将结果发送到访问者的Web浏览器中。访问者的Web浏览器就会接收到例如第一个HTML示例那样的内容(也就是没有指令的HTML代码),访问者也不会察觉到服务器端使用。(存储在Web服务器端的模板文件是不会被修改的;替换也仅仅出现在Web服务器的响应中。)
为模板准备的数据整体被称作为数据模型。数据模型是树形结构(就像硬盘上的文件夹和文件),在视觉效果上, 数据模型可以是(这只是一个形象化显示,数据模型不是文本格式,它来自于Java对象):
早期版本中,可以从数据模型中选取这些值,使用user和latestProduct.name表达式即可。类比于硬盘的树形结构,数据模型就像一个文件系统,“(root)”和latestProduct就对应着目录(文件夹),而user、url和name就是这些目录中的文件。
总体上,模板和数据模型是FreeMarker来生成输出所必须的组成部分:模板+数据模型=输出
项目创建流程
第一步:创建一个maven项目导入FreeMarker jar包;
第二步:创建目录templates,并创建一个模版文件hello.ftl;
第三步:创建一个运行模版引擎的FreeMarkerDemo.java文件;
第四步:运行main方法后刷新项目;
pom.xml文件,maven项目核心文件,管理jar包。
数据类型
和java不同,不需要定义变量的类型,直接赋值即可。
字符串: value = "xxxx" 。如果有特殊字符 string = r"xxxx" 。单引号和双引号是一样的。
数值:value = 1.2。数值可以直接等于,但是不能用科学计数法。
布尔值:true or false。
List集合:list = ; list= 表示 1 到 100 的集合,反之亦然。
Map集合:map = {"key" : "value" , "key2" : "value2"},key 必须是字符串哦!
实体类:和EL表达式差不多,直接点出来。
字符串操作
字符串连接:可以直接嵌套${"hello , ${name}"} ; 也可以用加号${"hello , " + name}
字符串截取:string。index 可以是一个值,也可以是形如 0..2 表示下标从0开始,到下标为2结束。一共是三个数。
比较运算符
== (等于),!= (不等于),gt(大于),gte(大于或者等于),lt(小于),lte(小于或者等于)。不建议用 >,< 可能会报错!
一般和 if 配合使用
内建函数
提供了一些内建函数来转换输出,其结构:变量?内建函数,这样就可以通过内建函数来转换输出变量。
html: 对字符串进行HTML编码;
cap_first: 使字符串第一个字母大写;
lower_case: 将字符串转成小写;
upper_case: 将字符串转成大写;
size: 获得集合中元素的个数;
int: 取得数字的整数部分。
变量空判断
! 指定缺失变量的默认值;一般配置变量输出使用
?? 判断变量是否存在。一般配合if使用 <#if value??>
宏指令
可以理解为java的封装方法,供其他地方使用。宏指令也称为自定义指令,macro指令
语法很简单:<#macro val > 声明macro ; 使用macro <@val />
命名空间
可以理解为java的import语句,为避免变量重复。一个重要的规则就是:路径不应该包含大写字母,使用下划线_分隔词语,myName --> my_name
语法很简单:<#import "xxx.ftl" as val>
其他没有说明的语法是因为和java一样,没什么特别之处。所以没有列出来。
jsp
优点:
1、功能强大,可以写java代码;
2、支持jsp标签(jsp tag);
3、支持表达式语言(el);
4、官方标准,用户群广,丰富的第三方jsp标签库;
5、性能良好。jsp编译成class文件执行,有很好的性能表现。
缺点:
jsp没有明显缺点,非要挑点骨头那就是,由于可以编写java代码,如使用不当容易破坏mvc结构。
velocity
优点:
1、不能编写java代码,可以实现严格的mvc分离;
2、性能良好,据说比jsp性能还要好些;
3、使用表达式语言,据说jsp的表达式语言就是学velocity的。
缺点:
1、不是官方标准;
2、用户群体和第三方标签库没有jsp多;
3、对jsp标签支持不够好。
优点:
1、不能编写java代码,可以实现严格的mvc分离;
2、性能非常不错;
3、对jsp标签支持良好;
4、内置大量常用功能,使用非常方便;
5、宏定义(类似jsp标签)非常方便;
6、使用表达式语言。
缺点:
1、不是官方标准;
2、用户群体和第三方标签库没有jsp多。
选择freemarker的原因
1、性能。velocity应该是最好的,其次是jsp,普通的页面性能最差(虽然只是几毫秒到十几毫秒的差距)。但是在复杂页面上(包含大量判断、日期金额格式化)的页面上,该软件的性能比使用tag和el的jsp好;
2、宏定义比jsp tag方便;
3、内置大量常用功能,比如html过滤,日期金额格式化等等,使用非常方便;
4、支持jsp标签;
5、可以实现严格的mvc分离。
软件特色
1、通用目标能够生成各种文本:HTML、XML、RTF、Java源代码等等;
易于嵌入到你的产品中:轻量级;不需要Servlet环境;
插件式模板载入器:可以从任何源载入模板,如本地文件、数据库等等;
你可以按你所需生成文本:保存到本地文件;作为Email发送;从Web应用程序发送它返回给Web浏览器。
2、强大的模板语言
所有常用的指令:include、if/elseif/else、循环结构;
在模板中创建和改变变量;
几乎在任何地方都可以使用复杂表达式来指定值;
命名的宏,可以具有位置参数和嵌套内容;
名字空间有助于建立和维护可重用的宏库,或者将一个大工程分成模块,而不必担心名字冲突;
输出转换块:在嵌套模板片段生成输出时,转换HTML转义、压缩、语法高亮等等;你可以定义自己的转换。
3、通用数据模型
不是直接反射到Java对象,Java对象通过插件式对象封装,以变量方式在模板中显示;
你可以使用抽象(接口)方式表示对象(JavaBean、XML文档、SQL查询结果集等等),告诉模板开发者使用方法,使其不受技术细节的打扰。
4、为Web准备
在模板语言中内建处理典型Web相关任务(如HTML转义)的结构;
能够集成到Model2 Web应用框架中作为JSP的替代;
支持JSP标记库;
为MVC模式设计:分离可视化设计和应用程序逻辑;分离页面设计员和程序员。
5、智能的国际化和本地化
字符集智能化(内部使用UNICODE);
数字格式本地化敏感;
日期和时间格式本地化敏感;
非US字符集可以用作标识(如变量名);
多种不同语言的相同模板。
6、强大的XML处理能力
<#recurse> 和<#visit>指令(2.3版本)用于递归遍历XML树;
在模板中清楚和直觉的访问XML对象模型;
开源论坛JForum就是使用了FreeMarker做为页面模板。
工作原理
假设在一个应用系统中需要一个HTML页面如下:页面中的用户名(即上面的“Big Joe”)是登录这个网页的访问者的名字, 并且最新产品的数据应该来自于数据库才能随时更新。所以,不能直接在HTML页面中输入“Big Joe”、“greenmouse”及链接, 不能使用静态HTML代码。可以使用要求输出的模板来解决,模板和静态页面是相同的,只是它会包含一些程序将它们变成动态内容的指令:
模板文件存放在Web服务器上,当有人来访问这个页面,程序就会介入执行,然后动态转换模板,用最新的数据内容替换模板中${...}的部分,之后将结果发送到访问者的Web浏览器中。访问者的Web浏览器就会接收到例如第一个HTML示例那样的内容(也就是没有指令的HTML代码),访问者也不会察觉到服务器端使用。(存储在Web服务器端的模板文件是不会被修改的;替换也仅仅出现在Web服务器的响应中。)
为模板准备的数据整体被称作为数据模型。数据模型是树形结构(就像硬盘上的文件夹和文件),在视觉效果上, 数据模型可以是(这只是一个形象化显示,数据模型不是文本格式,它来自于Java对象):
早期版本中,可以从数据模型中选取这些值,使用user和latestProduct.name表达式即可。类比于硬盘的树形结构,数据模型就像一个文件系统,“(root)”和latestProduct就对应着目录(文件夹),而user、url和name就是这些目录中的文件。
总体上,模板和数据模型是FreeMarker来生成输出所必须的组成部分:模板+数据模型=输出
使用教程
这里通过模拟简单的代码自动生产工具来感受第一个程序。项目创建流程
第一步:创建一个maven项目导入FreeMarker jar包;
第二步:创建目录templates,并创建一个模版文件hello.ftl;
第三步:创建一个运行模版引擎的FreeMarkerDemo.java文件;
第四步:运行main方法后刷新项目;
pom.xml文件,maven项目核心文件,管理jar包。
使用方法
语法详解数据类型
和java不同,不需要定义变量的类型,直接赋值即可。
字符串: value = "xxxx" 。如果有特殊字符 string = r"xxxx" 。单引号和双引号是一样的。
数值:value = 1.2。数值可以直接等于,但是不能用科学计数法。
布尔值:true or false。
List集合:list = ; list= 表示 1 到 100 的集合,反之亦然。
Map集合:map = {"key" : "value" , "key2" : "value2"},key 必须是字符串哦!
实体类:和EL表达式差不多,直接点出来。
字符串操作
字符串连接:可以直接嵌套${"hello , ${name}"} ; 也可以用加号${"hello , " + name}
字符串截取:string。index 可以是一个值,也可以是形如 0..2 表示下标从0开始,到下标为2结束。一共是三个数。
比较运算符
== (等于),!= (不等于),gt(大于),gte(大于或者等于),lt(小于),lte(小于或者等于)。不建议用 >,< 可能会报错!
一般和 if 配合使用
内建函数
提供了一些内建函数来转换输出,其结构:变量?内建函数,这样就可以通过内建函数来转换输出变量。
html: 对字符串进行HTML编码;
cap_first: 使字符串第一个字母大写;
lower_case: 将字符串转成小写;
upper_case: 将字符串转成大写;
size: 获得集合中元素的个数;
int: 取得数字的整数部分。
变量空判断
! 指定缺失变量的默认值;一般配置变量输出使用
?? 判断变量是否存在。一般配合if使用 <#if value??>
宏指令
可以理解为java的封装方法,供其他地方使用。宏指令也称为自定义指令,macro指令
语法很简单:<#macro val > 声明macro ; 使用macro <@val />
命名空间
可以理解为java的import语句,为避免变量重复。一个重要的规则就是:路径不应该包含大写字母,使用下划线_分隔词语,myName --> my_name
语法很简单:<#import "xxx.ftl" as val>
其他没有说明的语法是因为和java一样,没什么特别之处。所以没有列出来。
软件优缺点
在java领域,表现层技术主要有三种:jsp、freemarker、velocity。jsp
优点:
1、功能强大,可以写java代码;
2、支持jsp标签(jsp tag);
3、支持表达式语言(el);
4、官方标准,用户群广,丰富的第三方jsp标签库;
5、性能良好。jsp编译成class文件执行,有很好的性能表现。
缺点:
jsp没有明显缺点,非要挑点骨头那就是,由于可以编写java代码,如使用不当容易破坏mvc结构。
velocity
优点:
1、不能编写java代码,可以实现严格的mvc分离;
2、性能良好,据说比jsp性能还要好些;
3、使用表达式语言,据说jsp的表达式语言就是学velocity的。
缺点:
1、不是官方标准;
2、用户群体和第三方标签库没有jsp多;
3、对jsp标签支持不够好。
优点:
1、不能编写java代码,可以实现严格的mvc分离;
2、性能非常不错;
3、对jsp标签支持良好;
4、内置大量常用功能,使用非常方便;
5、宏定义(类似jsp标签)非常方便;
6、使用表达式语言。
缺点:
1、不是官方标准;
2、用户群体和第三方标签库没有jsp多。
选择freemarker的原因
1、性能。velocity应该是最好的,其次是jsp,普通的页面性能最差(虽然只是几毫秒到十几毫秒的差距)。但是在复杂页面上(包含大量判断、日期金额格式化)的页面上,该软件的性能比使用tag和el的jsp好;
2、宏定义比jsp tag方便;
3、内置大量常用功能,比如html过滤,日期金额格式化等等,使用非常方便;
4、支持jsp标签;
5、可以实现严格的mvc分离。
∨ 展开