栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

FreeMarker

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

FreeMarker

1. FreeMarker

  • 概述

     FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 是一个Java类库。
     特性:
     	1.通用目标
     		能够生成各种文本:HTML、XML、RTF、Java源代码等等。
     		易于嵌入到你的产品中:轻量级;不需要Servlet环境。
     		插件式模板载入器:可以从任何源载入模板,如本地文件、数据库等等。
     		你可以按你所需生成文本:保存到本地文件;作为Email 发送;从Web应用程序发送它返回给Web浏览器。
     	2.强大的模板语言
     		所有常用的指令:include、if/elseif/else、循环结构。
     		在模板中创建和改变变量。
     		几乎在任何地方都可以使用复杂表达式来指定值。
     		命名的宏,可以具有位置参数和嵌套内容。
     		名字空间有助于建立和维护可重用的宏库,或将大工程分成模块,而不必担心名字冲突。
     		输出转换块:在嵌套模板片段生成输出时,转换HTML转义、压缩、语法高亮等等;你可以定义自己的转换。
     	3.通用数据模型
     		FreeMarker不是直接反射到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做为页面模板。
     格式:
     	${express}
     注释:
     	
     	<#--freemarker注释-->
    
  • 配置坐标依赖和部署插件

     pom.xml中添加:
     	 
     	 
     		org.freemarker 
     		freemarker 
     		2.3.23
     	 
     	 
     	 
     		javax.servlet 
     		javax.servlet-api 		
     		3.0.1 
     	
     	 
     	 
     	 
     		org.eclipse.jetty 
     		jetty-maven-plugin 
     		9.2.1.v20140609 
     	
     web.xml变为:
     	
     	
     	
     	
     		freemarker
     		freemarker.ext.servlet.FreemarkerServlet
     		
     		
     	 	TemplatePath
     		
     		/template
     		
     		
     		
     		default_encoding
     		 UTF-8
     		
     	
     	
      	
     		freemarker
     		*.ftl
     	
     	
    
  • 数据类型

     1.布尔型:
     	等价于Java的Boolean类型。
     	不同的是不能直接输出,可转换为字符串输出。
     	 	?c                  ${bool?c}
            ?string             ${bool?string}
            ?string("","")      ${bool?string("数据值是true的时候显示","数据值是flase的时候显示")}
            ?then("","")        ${bool?then("数据值是true的时候显示","数据值是flase的时候显示")}
     2.日期型:
     	等价于java的Date类型。
     	不同的是不能直接输出,需要转换成字符串再输出。
     		?date				年月日          
         	?date				时分秒         
        	?datetime			年月日时分秒     
         	?string("自定义格式")指定格式        
            	y:年  M:月  d:日
                H:时  m:分  s:秒
     3.数值型:
     	等价于java 中的int,float,double等数值类型。
     	可以直接输出,有三种显示形式:数值型(默认)、货币型、百分比型。
     	1.转字符串
        	普通字符串       	?c
            货币型字符串     	?string.currency
            百分比型字符串   	?string.percent
        2.保留浮点型数值指定小数位(#表示一个小数位)
             					?string["0.##"]
     4.字符型:
     	等价于java中的字符串string。
     	可以直接输出,有很多内置函数。
     		?substring(start,end) 		截取字符串(左闭右开) 
     		?uncap_first 				首字母小写输出
     		?cap_first 					首字母大写输出  
     		?lower_case 				字母转小写输出 
     		?upper_case 				字母转大写输出 
     		?length						获取字符串长度
     		?starts_with("xx")?string 	是否以指定字符开头(boolean类型) 
     		?ends_with("xx")?string 	是否以指定字符结尾(boolean类型) 
     		?index_of("xx") 			获取指定字符的索引 
     		?trim 						去除字符串前后空格 
     		?replace("xx","xx")			替换指定字符串 
     5.sequence类型:
     	等价于java中的数组,list,set 等集合类型。
     	通过list指令输出序列 
     		<#list 序列名 as 元素名> 
     			${名称} 
     		
     			${序列名?size} 			获取序列的长度 
     			${元素名?index} 			获取序列元素的下标 
     			${序列名?first} 			获取第一个元素 
     			${序列名?last} 			获取最后一个元素 
     			序列名?reverse 			倒序输出 
     			序列名?sort 				升序输出 
     			序列名?sort?reverse 		降序输出 
     			序列名?sort_by("字段名")	指定字段名排序 
     注意:一般是JavaBean集合,对应的字段名需要提供get方法。
     6.hash类型:
     	等价于java中的Map类型。
     	1.key遍历输出 
     		<#list hash?keys as key> 
     			${key} -- ${hash[key]} 
     		 
     	2.value遍历输出 
     		<#list hash?values as value> 
     			${value} 
     		
    
  • 常见指令

     1.assign 			自定义变量指令 
     	可以创建一个新的变量, 或者替换一个已经存在的变量。
     语法:
     	<#assign 变量名=值> 
     	或
     	<#assign 变量名=值 变量名=值> (定义多个变量)
     2.if elseif else 	逻辑判断指令
     	可以使用if ,elseif和else指令来条件判断是否满足某些条件。
     格式:
     	<#if condition> 
     		... 
     	<#elseif condition2> 
     		... 
     	<#elseif condition3> 
     		... 
     	<#else> 
     		... 
     	
     注意: 
     	1.condition, condition2等:将被计算成布尔值的表达式。 
     	2.elseif和else指令是可选的。
     3.list 			遍历指令
     	可以使用list指令来对序列进行遍历。
     格式1:
     	<#list sequence as item> 
     	 
     格式2:
     	<#list sequence as item> 
     	<#else> 
     		当没有选项时,执行else指令 
     	 
     注意: 
     	1.else 部分是可选的 。
     	2.sequence:想要迭代的项,可以是序列或集合的表达式 。
     	3.item:循环变量的名称。
     	4.当没有迭代项时,才使用else指令, 可以输出一些特殊的内容而不只是空在那里。
     4.macro 			自定义指令宏
     	可以使用macro指令来自定义一些自定义指令。
     	格式1(无参数):
     		<#macro 指令名> 
     			指令内容 
     		 
     	使用:
     		<@指令名>
     	格式2(有参数):
     		<#macro 指令名 参数名1 参数名2> 
     			指令内容 
     		 
     	使用:
     		<@指令名 参数名1=参数值1 参数名2=参数值2>
     注意: 
     	1.指令可以被多次使用。 
     	2.自定义指令中可以包含字符串,也可包含内置指令。
     5.nested 			占位指令
     	nested指令执行自定义指令开始和结束标签中间的模板片段。
     	嵌套的片段可以包含模板中任意合法的内容。
     	一般结合macro指令一起使用。 
     	可以将自定义指令中的内容通过nested指令占位,当使用自定义指令时,会将占位内容显示。
     6.import 			导入指令
    	import 指令可以引入一个库。
    	也就是说,它创建一个新的命名空间,然后在那个命名空间中执行给定路径的模板。
    	可以使用引入的空间中的指令。
    	格式:
    		<#import "文件名" as 自定义名称>
     7.include 			包含指令
     	可以使用include指令在你的模板中插入另外一个FreeMarker模板文件 。 
     	被包含模板的输出格式是在include标签出现的位置插入的。 
     	被包含的文件和包含它的模板共享变量,就像是被复制粘贴进去的一样。
     	格式:
     		<#include "文件名">
    
  • 页面静态化

     通过freemarker.template.Configuration这个对象对模板进行加载的(它也处理创建和缓存预解析模板的工作),
     然后我们通过getTemplate方法获得你想要的模板,
     有一点要记住freemarker.template.Configuration在你整个应用必须保证唯一实例。
    
  • 运算符

     1.算术运算符
     	+、-、*、/、%
     2.逻辑运算符 
     	&&、||、!
     3.比较运算符 
     	> (gt)				大于号,推荐使用gt 
     	< (lt)				小于号,推荐使用lt 
     	>= (gte)			大于等于, 推荐是用gte 
     	<= (lte)			小于等于,推荐使用lte 
     	== 					等于 
     	!= 					不等于
     4.空值运算符 
     	??				判断是否为空,返回布尔类型 
     		如果不为空返回 false, 如果为空返回 true,不能直接输出 ${(name??)?string} 
     	!				设置默认值
     		如果为空,则设置默认值 
     		1.设置默认为空字符串: ${name!} 
     		2.设置指定默认值 ${name!'zhangsan'}
    
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/826330.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号