FreeMarker

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

Freemarker脚本为Freemarker Template Language;

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

JSP与Freemarker

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

FreeMarker基本用法

FreemarkerSample1.java

  1. package freemarker;
  2. import java.io.IOException;
  3. import java.io.OutputStreamWriter;
  4. import java.util.HashMap;
  5. import java.util.Map;
  6. import freemarker.core.ParseException;
  7. import freemarker.template.Configuration;
  8. import freemarker.template.MalformedTemplateNameException;
  9. import freemarker.template.Template;
  10. import freemarker.template.TemplateException;
  11. import freemarker.template.TemplateNotFoundException;
  12. public class FreemarkerSample1 {
  13. public static void main(String[] args) throws TemplateNotFoundException, MalformedTemplateNameException,
  14. ParseException, IOException, TemplateException {
  15. // 1.加载模板
  16. // 创建核心配置对象
  17. Configuration config = new Configuration(Configuration.VERSION_2_3_28);
  18. // 设置加载的目录
  19. config.setClassForTemplateLoading(FreemarkerSample1.class, ""); // ""代表当前包
  20. // 得到模板对象
  21. Template t = config.getTemplate("sample1.ftl");
  22. // 2.创建数据
  23. Map<String, Object> data = new HashMap<>();
  24. data.put("site", "百度");
  25. data.put("url", "http://www.baidu.com");
  26. // 3.产生输出
  27. t.process(data, new OutputStreamWriter(System.out));
  28. }
  29. }

sample1.ftl

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

控制台输出

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

FTL取值

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

分支判断

  1. <#-- if -->
  2. <#if state == 1>
  3. 我是1
  4. <#elseif state == 2>
  5. 我是2
  6. </#if>
  7. <#if user??> <#-- 判断对象是否为null -->
  8. 我不是null
  9. </#if>
  10. <#-- switch -->
  11. <#switch state>
  12. <#case 1>
  13. 我是1
  14. <#break>
  15. <#case 2>
  16. 我是2
  17. <#break>
  18. <#default>
  19. 其他
  20. </#switch>

list迭代

  1. <#-- list迭代列表 -->
  2. <#list students as stu>
  3. <li>${stu_index}-${stu.name}</li>
  4. </#list>
  5. <#-- list迭代Map -->
  6. <#list map?keys as key>
  7. ${key}:${map[key]}
  8. </#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")
  1. <#-- ?string可以实现三目运算符的操作 -->
  2. ${(words?index_of("blood") != -1)?string("包含敏感词汇", "不包含敏感词汇")}
  3. <#-- replace -->
  4. ${words?replace("blood", "*****")}
  5. <#-- sort_by返回一个新的集合,默认升序排列 -->
  6. <#-- reverse将顺序反转 -->
  7. <#list computers?sort_by("price")?reverse as c>
  8. ${c.sn}-${c.price}
  9. </#list>

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

Freemarker与Servlet整合

配置FreemarkerServlet

web.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <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">
  3. <display-name>fm</display-name>
  4. <welcome-file-list>
  5. <welcome-file>index.html</welcome-file>
  6. <welcome-file>index.htm</welcome-file>
  7. <welcome-file>index.jsp</welcome-file>
  8. <welcome-file>default.html</welcome-file>
  9. <welcome-file>default.htm</welcome-file>
  10. <welcome-file>default.jsp</welcome-file>
  11. </welcome-file-list>
  12. <servlet>
  13. <servlet-name>freemarker</servlet-name>
  14. <servlet-class>freemarker.ext.servlet.FreemarkerServlet</servlet-class>
  15. <init-param>
  16. <param-name>TemplatePath</param-name>
  17. <param-value>/WEB-INF/ftl</param-value>
  18. </init-param>
  19. </servlet>
  20. <servlet-mapping>
  21. <servlet-name>freemarker</servlet-name>
  22. <url-pattern>*.ftl</url-pattern>
  23. </servlet-mapping>
  24. </web-app>

【JavaWeb】FreeMarker快速入门的更多相关文章

  1. FreeMarker 快速入门

    FreeMarker 快速入门 FreeMarker是一个很值得去学习的模版引擎.它是基于模板文件生成其他文本的通用工具.本章内容通过如何使用FreeMarker生成Html web 页面 和 代码自 ...

  2. springboot2.0整合freemarker快速入门

    目录 1. 快速入门 1.1 创建工程pom.xml文件如下 1.2 编辑application.yml 1.3 创建模型类 1.4 创建模板 1.5 创建controller 1.6 测试 2. F ...

  3. FreeMarker快速入门

    虽然当前比较推荐使用thymeleaf替代jsp作为java网页开发的模板语言,不过公司推荐使用freemarker,那就顺势而为,速度学一发,然后迅速开始新项目了. 简介 FreeMarker第一个 ...

  4. 【FreeMarker】FreeMarker快速入门(一)

    什么是 FreeMarker FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具. 它不是面向最终用户 ...

  5. SpringMVC总结一:快速入门

    MVC: MVC是一种架构模型,本身没有什么功能,只是让我们的项目结构更加合理,流程控制更加清晰,一般包含三个组件: ​ **Model(模型)**:数据模型,用于提供要展示的数据.一般包含数据和行为 ...

  6. 零基础快速入门SpringBoot2.0教程 (三)

    一.SpringBoot Starter讲解 简介:介绍什么是SpringBoot Starter和主要作用 1.官网地址:https://docs.spring.io/spring-boot/doc ...

  7. MyBatis学习总结(一)——MyBatis快速入门

    一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...

  8. MyBatis快速入门

    一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...

  9. MyBatis学习总结(一)——MyBatis快速入门(转载)

    本文转载自http://www.cnblogs.com/jpf-java/p/6013537.html MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了 ...

随机推荐

  1. Java日期时间API系列6-----Jdk8中java.time包中的新的日期时间API类

    因为Jdk7及以前的日期时间类的不方便使用问题和线程安全问题等问题,2005年,Stephen Colebourne创建了Joda-Time库,作为替代的日期和时间API.Stephen向JCP提交了 ...

  2. Cobalt Strike系列教程第四章:文件/进程管理与键盘记录

    Cobalt Strike系列教程分享如约而至,新关注的小伙伴可以先回顾一下前面的内容: Cobalt Strike系列教程第一章:简介与安装 Cobalt Strike系列教程第二章:Beacon详 ...

  3. GPS NMEA-0183协议常用报文数据格式

    点击上方↑↑↑蓝字[协议分析与还原]关注我们 " 整理的GPS有关的协议分析资料." 之前分析一些车载设备的流量时,有部分经验,在这里和大家分享. 产生这些流量的设备通常是实体终端 ...

  4. WPF--事件列表

    事件 描述 Annotation.AnchorChanged 新增.移除或修改 Anchor 元素时发生. Annotation.AuthorChanged 新增.移除或修改 Author 元素时发生 ...

  5. LogMiner Utility Release 8i - 11g (Doc ID 291686.1)

    LogMiner Utility Release 8i - 11g (Doc ID 291686.1) APPLIES TO: Oracle Database Exadata Cloud Machin ...

  6. Python语法速查: 6. 循环与迭代

    返回目录 (1)while循环与for循环 while仅能用于普通循环,而for除了可以做循环外,还可以遍历序列.集合.字典.迭代器等. 需要注意的是,在类似:for i in somelist: 的 ...

  7. NOIP 2016 玩具谜题

    洛谷 P1563 玩具谜题 洛谷传送门 JDOJ 3136: [NOIP2016]玩具谜题 D1 T1 JDOJ传送门 Description 小南有一套可爱的玩具小人, 它们各有不同的职业. 有一天 ...

  8. matlab键盘快捷键无法使用的解决办法

    打开matlab,在主页里点击 预设/preferences 左栏找 键盘/keyboard 点开键盘点击 快捷方式/shortcuts 在右边 活动设置 /Active settings 里选择 W ...

  9. 数据结构与算法-Python/C(目录)

    第一篇 基本概念 01 什么是数据结构 02 什么是算法 03 应用实例-最大子列和问题 第二篇 线性结构 01 线性表及其实现 02 堆栈 03 队列 04 应用实例-多项式加法运算 05 小白专场 ...

  10. java(三)基础类型之间的转换

    自动类型转换:容量小的类型自动转换成为容量大的数据类型,数据类型按容量大小排序为: 有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后在进行运算: byte.shor ...