freemarker

什么是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, elseif
2) switch, case, default, break
3) list, break
4) include
5) Import
6) assign
7) 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
函数调用 语法为 () {‘ aaa ’?trim}

以下是字符串串函数的用法:

<#--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>
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值