【JavaWeb】FreeMarker快速入门

FreeMarker

Freemarker是免费开源的模板引擎技术;

Freemarker脚本为Freemarker Template Language;

Freemarker提供了大量内建函数来简化开发;

JSP与Freemarker

JSPFreemarker
官方标准
执行方式编译型解释型
执行效率
开发效率
扩展能力
数据提取JSTL+EL内置标签

FreeMarker基本用法

FreemarkerSample1.java

package freemarker;

import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.Map;

import freemarker.core.ParseException;
import freemarker.template.Configuration;
import freemarker.template.MalformedTemplateNameException;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import freemarker.template.TemplateNotFoundException;

public class FreemarkerSample1 {

    public static void main(String[] args) throws TemplateNotFoundException, MalformedTemplateNameException,
            ParseException, IOException, TemplateException {
        // 1.加载模板
        // 创建核心配置对象
        Configuration config = new Configuration(Configuration.VERSION_2_3_28);
        // 设置加载的目录
        config.setClassForTemplateLoading(FreemarkerSample1.class, ""); // ""代表当前包
        // 得到模板对象
        Template t = config.getTemplate("sample1.ftl");
        // 2.创建数据
        Map<String, Object> data = new HashMap<>();
        data.put("site", "百度");
        data.put("url", "http://www.baidu.com");
        // 3.产生输出
        t.process(data, new OutputStreamWriter(System.out));
    }

}

sample1.ftl

<#-- 这是注释 -->
${site}-${url}

控制台输出

百度-http://www.baidu.com

FTL取值

  • ${属性名} 取值,可对属性进行计算
  • ${属性名!默认值} 如果属性不存在的话使用默认值
  • ${属性名?string("")} 格式化输出

分支判断

<#-- if -->
<#if state == 1>
我是1
<#elseif state == 2>
我是2
</#if>
<#if user??> <#-- 判断对象是否为null -->
我不是null
</#if>

<#-- switch -->
<#switch state>
    <#case 1>
        我是1
        <#break>
    <#case 2>
        我是2
        <#break>
    <#default>
        其他
</#switch>

list迭代

<#-- list迭代列表 -->
<#list students as stu>
 <li>${stu_index}-${stu.name}</li>
</#list>

<#-- list迭代Map -->
<#list map?keys as key>
    ${key}:${map[key]}
</#list>

常用内建函数

函数名说明示例
lower_case/upper_case大小写转换"abcdefg"?upper_case
cap_first首字母大写"jackson"?cap_first
index_of查找字符索引"abcdef"?index_of("b")
length返回字符串长度"abcdef"?length
round/floor/ceiling四舍五入/下取整/上取整pi?floor
size得到集合元素总数students?size
first/last获取第一个/最后一个元素students?first
sort_by按某个属性对集合排序list?sort_by("time")
<#-- ?string可以实现三目运算符的操作 -->
${(words?index_of("blood") != -1)?string("包含敏感词汇", "不包含敏感词汇")}

<#-- replace -->
${words?replace("blood", "*****")}

<#-- sort_by返回一个新的集合,默认升序排列 -->
<#-- reverse将顺序反转 -->
<#list computers?sort_by("price")?reverse as c>
    ${c.sn}-${c.price}
</#list>

freemarker中文官方参考手册: http://freemarker.foofun.cn/

Freemarker与Servlet整合

配置FreemarkerServlet

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>fm</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <servlet-name>freemarker</servlet-name>
    <servlet-class>freemarker.ext.servlet.FreemarkerServlet</servlet-class>
    <init-param>
        <param-name>TemplatePath</param-name>
        <param-value>/WEB-INF/ftl</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>freemarker</servlet-name>
    <url-pattern>*.ftl</url-pattern>
  </servlet-mapping>
</web-app>

转载于:https://www.cnblogs.com/huowuyan/p/11321866.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值