freemarker
来源:互联网 发布:网上挣钱的软件 编辑:程序博客网 时间:2024/06/08 16:01
什么是FreeMakrer
模板引擎技术
FreeMakrer是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写,具有以下特点:
(1)FreeMakrer适合被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序。
(2)虽然FreeMakrer具有一些编程的能力,但通常由Java程序准备要显示的数据,由FreeMakrer生成页面,通过模板显示准备的数据 。
(3)FreeMakrer不是一个Web应用框架,而适合作为Web应用框架一个组件。
(4)FreeMakrer与容器无关,因为它并不知道HTTP或Servlet。
(5)Freemarker 更适合作为Model2框架(如Struts)的视图组件,你也可以在模板中使用JSP标记库。
(6)Freemarker 是免费的 。
数据模型+模板=输出
FreeMakrer的下载
<font color=#847oFF>jar 包:可在www.freemarker.org下载 ,或者取maven.aliyun.com下载</font>插件:可在www.freemarker.org下载或者百度插件放入eclipse中plugins目录下即可
FreeMakrer的基本语法
1、FreeMarker标记
***FreeMarker标记的设计非常精炼,只有三种1)*
$ : ${expression} FreeMarker会在输出时用实际值进行替代 例如:${stockNum?default(‘’)}2) # :标准的FTL标记。大部分FreeMarker指令都以#开始,可以明显地与html标记区分, <#if user = "BigJoe">our beloved leader</#if>。同时,FTL文件的注释包含在<#--和-->(而不是<!--和-->)之间 3)@作为用户定义指令使用宏变量时,使用@替代FTL标记中的#。后面将详细介绍宏 2标准的FTL标记指令1) if, else, elseif2) switch, case, default, break3) list, break4) include5) Import6) assign7) macro, nested, return if, else, elseif
例子
public class TestFreeMarker { public static void main(String[] args) throws IOException, TemplateException { Configuration cfg = new Configuration(); //配置ftl查找目录 cfg.setDirectoryForTemplateLoading( new File("template")); //设置数据的抓取模式 cfg.setObjectWrapper(new DefaultObjectWrapper()); Map latest = new HashMap(); //构建数据 latest.put("url", "products/greenmouse.html"); latest.put("name", "green mouse"); // 创建一个hashMap Map root = new HashMap(); // 存入值 root.put("user", "Big Joe"); root.put("latestProduct", latest); root.put("sex", "1"); //数组list break 循环 String[] str=new String[]{"1","2","3","4","5"}; root.put("arr",str); List list=new ArrayList(); User user=new User(); user.setId("1"); user.setName("张三"); list.add(user); User user1=new User(); user1.setId("2"); user1.setName("李四"); list.add(user1); root.put("userList", list); //找到模板对象 实例模板对象 Template temp = cfg.getTemplate("hello.ftl"); //文件输出流 FileOutputStream fos=new FileOutputStream("E:\\html\\hello.html"); //输出到目标生成html Writer out = new OutputStreamWriter(fos); temp.process(root, out); out.flush(); }}
public class User { private String id; private String name; public User(){ } public User(String id, String name) { super(); this.id = id; this.name = name; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; }}
freeemarker模板语法
freemarker的模板 ftl为后缀 语法类似于jsp的标签
添加 hellworld.ftl
<!-- 定义模板--> <html><head> <title>Welcome!</title></head><body> <h1>Welcome ${user}!</h1> <p>Our latest product: <a href="${latestProduct.url}">${latestProduct.name}</a>!<br/><#-- if标记 键=值 --> 我的性别是: <br/> <#if sex = '1'> 男 <br/> <#else> 女 <br/> </#if> <#-- list循环标记 数据或集合 as 临时变量 临时变量_index 获取当前的索引从0开始 break 标记用于退出循环 --> 输出数组结果: <br/> <#list arr as tmp> <#if tmp_index=2> <#break> </#if> <#if (tmp_index+1)%2==0> <font color=green size=10>${tmp}--->${tmp_index+1}</font> <br/> <#else> <font color=red size=10>${tmp}--->${tmp_index+1}</font> <br/> </#if> </#list> 输出list结果: <br/> <#list userList as userTmp> ${userTmp.id}---->${userTmp.name} <br/> </#list> <br/></body></html>
freemarker内置的处理函数(http://freemarker.org/docs/ref_builtins.html)
函数调用 语法为
以下是字符串串函数的用法:
<#--FTL内置的处理函数--><#assign str=' hello my name is zhang '><#assign str1='HELLO WORLD'><#--获取长度-->${str?length}<#--取空格-->--${str?trim}--<#--转小写-->${str1?lower_case}<#--转大写-->${str?upper_case}<#--获得序列中元素的数目-->${userList?size}<#--取得数字的整数部分-->${1.6?int}${userList?size}<#--精度为3位-->${1.656464513546313574652?float}<#--判断变量是否存在--><#if aaa?exists>${aaa}</#if>
定义变量:
<#assign age=12>
javaee环境下 使用freemarkerservlet寻找ftl文件并输出
添加一个servlet 映射路径 /t web.xml添加:
<servlet> <description></description> <display-name>TestServlet</display-name> <servlet-name>TestServlet</servlet-name> <servlet-class>webtest.TestServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>TestServlet</servlet-name> <url-pattern>/TestServlet</url-pattern> </servlet-mapping>
配置freemarkerservlet 在web.xml添加
<servlet> <servlet-name>freemarker</servlet-name> <servlet-class>freemarker.ext.servlet.FreemarkerServlet</servlet-class> <!--模板的查找路径 从上下文根路径查找模板ftl文件 --> <init-param> <param-name>TemplatePath</param-name> <param-value>/</param-value> </init-param> <!--是否不需要缓存 --> <init-param> <param-name>NoCache</param-name> <param-value>true</param-value> </init-param> <!--最终显示html --> <init-param> <param-name>ContentType</param-name> <param-value>text/html;charset=UTF-8</param-value> </init-param> <!--定时刷新模板--> <init-param> <param-name>template_update_delay</param-name> <param-value>0</param-value> </init-param> <!--默认字符集 --> <init-param> <param-name>default_encoding</param-name> <param-value>UTF-8</param-value> </init-param> <!--数字的格式 --> <init-param> <param-name>number_format</param-name> <param-value>0.##</param-value> </init-param> <!--servlet在容器启动时实例化 --> <load-on-startup>1</load-on-startup></servlet>
- freemarker
- freemarker
- FreeMarker
- FreeMarker
- freemarker
- freemarker
- freemarker
- Freemarker
- freemarker
- freemarker
- FreeMarker
- freeMarker
- freemarker
- FreeMarker
- FreeMarker
- FreeMarker
- FreeMarker
- freemarker
- 【codevs 1004】四子连棋
- 关于SSM框架 面试点总结
- spring mvc Controller重复导致报错
- 基于Hadoop的第二个分布式算法Day1-2
- miniUI改变行的背景色,设置行的颜色
- freemarker
- Java 集合系列07之 Stack详细介绍(源码解析)和使用示例
- C#基础(8)——高级参数out、ref、params
- bzoj1875: [SDOI2009]HH去散步
- error C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead.
- MQTT--Qt5编写MQTT-client客户端
- Java 集合系列08之 List总结(LinkedList, ArrayList等使用场景和性能分析)
- OS-->Gradle3.0 修改APK生成路径和文件名
- Java8 lambada表达式