知识点

相关文章

更多

最近更新

更多

Java模板引擎 FreeMarker介绍

2019-03-02 23:28|来源: 领悟书生

FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写,FreeMarker被设计用来生成HTML Web页面(为了提高页面的访问速度,把页面静态化),特别是基于MVC模式的应用程序

FreeMarker的操作过程是这样的:定义模板文件,准备好数据,通过模板显示准备的数据(如下图):



FreeMarker不是一个Web应用框架,而适合作为Web应用框架一个组件

FreeMarker与容器无关,因为它并不知道HTTP或Servlet;FreeMarker同样可以应用于非Web应用程序环境

FreeMarker更适合作为Model2框架(如Struts)的视图组件,你也可以在模板中使用JSP标记库

FreeMarker是免费的

而且你还可以通过Eclipse的插件来编辑FreeMarker,经过验证,FreeMarker 最好的 Eclipse 编辑插件是 JBoss Tools

FreeMarker特性

1、通用目标

能够生成各种文本:HTMLXMLRTFJava源代码等等

易于嵌入到你的产品中:轻量级;不需要Servlet环境

插件式模板载入器:可以从任何源载入模板,如本地文件、数据库等等

你可以按你所需生成文本:保存到本地文件;作为Email发送;从Web应用程序发送它返回给Web浏览器

2、强大的模板语言

所有常用的指令:includeif/elseif/else、循环结构

在模板中创建和改变变量

几乎在任何地方都可以使用复杂表达式来指定值

命名的宏,可以具有位置参数和嵌套内容

名字空间有助于建立和维护可重用的宏库,或者将一个大工程分成模块,而不必担心名字冲突

输出转换块:在嵌套模板片段生成输出时,转换HTML转义、压缩、语法高亮等等;你可以定义自己的转换

3、通用数据模型

FreeMarker不是直接反射到Java对象,Java对象通过插件式对象封装,以变量方式在模板中显示

你可以使用抽象(接口)方式表示对象(JavaBeanXML文档、SQL查询结果集等等),告诉模板开发者使用方法,使其不受技术细节的打扰

4、为Web准备

在模板语言中内建处理典型Web相关任务(如HTML转义)的结构

能够集成到Model2 Web应用框架中作为JSP的替代

支持JSP标记库

MVC模式设计:分离可视化设计和应用程序逻辑;分离页面设计员和程序员

5、智能的国际化和本地化

字符集智能化(内部使用UNICODE

数字格式本地化敏感

日期和时间格式本地化敏感

US字符集可以用作标识(如变量名)

多种不同语言的相同模板

6、强大的XML处理能力

<#recurse> <#visit>指令(2.3版本)用于递归遍历XML

在模板中清楚和直觉的访问XML对象模型

开源论坛 JForum 就是使用了 FreeMarker 做为页面模板。



本文链接:Java模板引擎 FreeMarker介绍

相关问答

更多
  • freemarker是data+model=输出。需要替换你模型的所有代号的,替换一次就行了,你的asp的eval实际上也是替换
  • scala中的List不是java的List,他们并没有任何的继承关系,你需要把Scala的List转换成Java的List import scala.collection.convert.wrapAsJava.bufferAsJavaList val s:java.util.List[Int] = bufferAsJavaList(List(1,2,3).toBuffer) 但是根据你的提示可以知道,其实FreeMarker只是需要一个Collection就可以了,那么你还可以这样做 import sca ...
  • 错误信息很明显了,他需要一个hashmap,你给了一个arraylist。 new一个hashmap, 然后 put("students",stulist)
  • FreeMarker 是一个用Java编写的模板引擎,主要用来生成HTML Web页面,特别是基于MVC模式的应用程序。虽然FreeMarker具有一些编程的能力,但不像PHP,通常由Java程序准备要显示的数据,由 FreeMarker模板生成页面。 FreeMarker可以作为Web应用框架一个组件,但它与容器无关,在非Web应用程序环境也能工作的很好。 FreeMarker适合作为MVC的视图组件,还能在模板中使用JSP标记库。 所以你其实是用freemarker的ftl 做前端页面来生成对应的htm ...
  • freemarker 的模板文件也并不一定是要以 .ftl 为后缀的。 你把 FTL 标签写在 html 中,让html 作为 freemarker 的模板也是可以滴
  • 这个看你网站功能和性能需求了。网上有很多关于这些技术区别的,你可以去看一看。   引用篇文章给你:   浅谈jsp、freemarker、velocity区别 http://blog.csdn.net/tjcyjd/article/details/16803877 作者:浮云中的毛驴   以前做web开发页面层用的基本就是就是,最近公司java项目页面层用的技术是velocity。听说jsp要淘汰,也不知道是真是假,但本人还是比较喜欢jsp的,下面是网上查找的javaweb项目页面3种技术的区别。   在j ...
  • 循环列表需要加<#list datas as bean>标签的;
  • 在扩展DefaultObjectWrapper类之后,问题得以解决。 我不得不将它升级到更高版本的Freemarker.jar。 After extending the DefaultObjectWrapper class the problem was solved. I had to upgrade it to a higher version of Freemarker.jar.
  • 如果在富编辑器(如Word或写字板)中输入${name} ,由于{和}是RTF中的保留字符,它将在保存的文件中变为$\{name\} 。 (用记事本打开它看看。)要解决这个问题,你必须使用一个自定义的TemplateLoader实现(通过Configuration.setTemplateLoader ),它包装另一个TemplateLoader以将Reader包装到一个过滤器中。 此过滤器应该查找$\{ ,并且从那里它应该取消RTF直到关闭\} 。 当然,带有$[NAME]$的旧模板做了类似的Templat ...
  • 它不起作用,因为大于号的符号被视为#if标记的结尾。 所以实际上你有<#if category.getId()> ,而id不是布尔值。 尝试<#if (category.getId() > 1)> 。 (顺便说一句,只需编写category.id 。无需在FreeMarker中get...() 。) It doesn't work because the greater-than sign is seen as the end of the #if tag. So in effect you have <# ...