FreeMarker的主要学习内容

FreeMarker中文官方手册(可结合学习)http://freemarker.foofun.cn/

FreeMarker学习笔记源码git地址(可供下载):https://github.com/L-Melted/FreeMarkerDemo.git

三、FreeMarker常见指令

assign自定义变量指令

使用assign指令你可以创建一个新的变量,或者替换一个已经存在的变量。

创建Servlet,方便向对应页面进行跳转

package com.xxx.servlet;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;/***  @author: liman*  @Date: 2020/12/22 15:47*  @Description: FreeMarker 常见指令 :assign自定义变量指令*/
@WebServlet("/f09")
public class FreeMarker09 extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//请求转发跳转到指定的模板页面 template/f01.ftlreq.getRequestDispatcher("template/f09.ftl").forward(req, resp);}
}

在webapp的template文件下面创建f09.ftl文件获取数据

<#--assign自定义变量指令语法:<#assign 变量名=值><#assign 变量名=值 变量名=值> (定义多个变量)
--><h5>assign自定义变量指令</h5>
<#-- 定义单个变量 -->
<#assign str="hello">
${str}<br/>
<#-- 定义多个变量 -->
<#assign num=1 names=["zhangsan","lisi","wangwu"]>
${num} -- ${names?join(",")}

if elseif else 逻辑判断指令

可以使用if,else if和else指令来条件判断是否满足某些条件。

创建Servlet,方便向对应页面进行跳转

package com.xxx.servlet;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;/***  @author: liman*  @Date: 2020/12/22 15:47*  @Description: FreeMarker 常见指令 :if elseif else自定义变量指令*/
@WebServlet("/f10")
public class FreeMarker10 extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//请求转发跳转到指定的模板页面 template/f01.ftlreq.getRequestDispatcher("template/f10.ftl").forward(req, resp);}
}

在webapp的template文件下面创建f09.ftl文件获取数据

<#--if,else,elseif逻辑判断指令格式:<#if condition>...<#elseif condition2>...<#elseif condition3>...<#else>...</#if>注:1.condition,condition2等:将被计算成布尔值的表达式。2.elseif和else指令是可选的。
-->
<h5>if,else,elseif逻辑判断指令</h5>
<#assign score = 60>
<#if score lt 60><h6>你个小渣渣!!!</h6><#elseif score == 60><h6>分不在高,及格就行!!!</h6><#elseif score gt 60 && score lt 80><h6>革命尚未成功,同志仍需努力!!!</h6><#else><h6>哎呦不错哦!!!</h6>
</#if><#-- 判断数据是否存在 -->
<#assign list="">
<#if list??>数据存在<#else>数据不存在
</#if>
<br/><#if list2??>数据存在
<#else>数据不存在
</#if>
<br/>

list遍历指令

可以使用list指令来对序列进行遍历

创建Servlet,方便向对应页面进行跳转

package com.xxx.servlet;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;/***  @author: liman*  @Date: 2020/12/22 15:47*  @Description: FreeMarker 常见指令 :list遍历指令*/
@WebServlet("/f11")
public class FreeMarker11 extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//请求转发跳转到指定的模板页面 template/f01.ftlreq.getRequestDispatcher("template/f11.ftl").forward(req, resp);}
}

在webapp的template文件下面创建f09.ftl文件获取数据

<#--
list指令格式1:<#list sequence as item></#list>格式2:<#list sequence as item><#else>当没有选项时,执行else指令</#list>
注:1.else部分是可选的2.sequence:想要迭代的项,可以是序列或集合的表达式3.item:循环变量的名称4.当没有迭代项时,才使用else指令,可以输出一些特殊的内容而不只是空在那里
-->
<#assign users = ["张三","李四","王五"]>
<#-- 遍历序列 -->
<#list users as user>${user}
</#list>
<br/><#-- 判断数据不为空,再执行遍历 (如果序列不存在,直接遍历会报错)-->
<#if users2??><#list users2 as user>${user}</#list>
</#if><#-- 当序列没有数据项时,使用默认信息 -->
<#assign users3 = []>
<#list users3 as user>${user}
<#else>用户数据不存在
</#list><#assign users3 = ['a']>
<#list users3 as user>${user}<#else>用户数据不存在
</#list>

macro自定义指令

可以使用macro指令来自定义一些自定义指令

创建Servlet,方便向对应页面进行跳转

package com.xxx.servlet;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;/***  @author: liman*  @Date: 2020/12/22 15:47*  @Description: FreeMarker 常见指令 :macro指令*/
@WebServlet("/f12")
public class FreeMarker12 extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//请求转发跳转到指定的模板页面 template/f01.ftlreq.getRequestDispatcher("template/f12.ftl").forward(req, resp);}
}

在webapp的template文件下面创建f12.ftl文件获取数据

<#--macro自定义指令 (宏)1.基本使用格式:<#macro 指令名>指令内容<#macro>使用:<@指令名></@指令名>2.有参数的自定义指令格式:<#macro 指令名 参数名1 参数名2>指令内容</#macro>使用:<@指令名 参数名1 = 参数值1 参数名2 = 参数值2></@指令名>注:1.指令可以被多次使用2.自定义指令中可以包含字符串,也可包含内置指令
-->
<#-- 自定义指令 -->
<#macro address>© 1999–2015 The FreeMarker Project. All rights reserved.
</#macro>
<#-- 使用自定义指令 -->
<@address></@address><#macro address><h3>© 1999–2015 The FreeMarker Project. All rights reserved.</h3>
</#macro>
<@address></@address>
<@address></@address>
<@address></@address><#-- 自定义有参数的指令 -->
<#macro queryUserByName uname>通过用户名查询用户对象 - ${uname}
</#macro><@queryUserByName uname = "admin"></@queryUserByName><br><#macro queryUserByName02 uname upwd uphone>多条件查询用户对象 - ${uname} - ${upwd} - ${uphone}
</#macro><@queryUserByName02 uname = "zhangsan" upwd = "123456" uphone = "123456"></@queryUserByName02>
<hr><#-- 自定义指令中包含内置指令 -->
<#macro cfg><#list 1..9 as i><#list 1..i as j>${j} * ${i} = ${j*i} &nbsp;</#list><br/></#list>
</#macro>
<@cfg></@cfg>
<hr><#macro cfb02 num><#list  1..num as i><#list 1..i as j>${j} * ${i} = ${j*i} &nbsp;</#list><br></#list>
</#macro>
<@cfb02 num = 5></@cfb02>

nested占位指令

nested指令执行自定义指令开始和结束标签中间的模板片段。嵌套的片段可以包含模板中任意合法的内容。

创建Servlet,方便向对应页面进行跳转

package com.xxx.servlet;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;/***  @author: liman*  @Date: 2020/12/22 15:47*  @Description: FreeMarker 常见指令 :macro指令*/
@WebServlet("/f13")
public class FreeMarker13 extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//请求转发跳转到指定的模板页面 template/f01.ftlreq.getRequestDispatcher("template/f13.ftl").forward(req, resp);}
}

在webapp的template文件下面创建f13.ftl文件获取数据

<#--nested 占位指令nested 相当于占位符,一般结合macro指令一起使用。可以将自定义指令中的内容通过nested指令占位,当使用自定义指令时,会将占位内容显示
--><#macro test>这是一段文本!!!<#nested><#nested>
</#macro>
<@test><h4>这是文本后面的内容!!!</h4></@test>

import导入指令

import指令可以引入一个库。也就是说,它创建一个新的命名空间,然后在那个命名空间中执行给定路径的模板。可以使用引入的空间中的指令。

创建Servlet,方便向对应页面进行跳转

package com.xxx.servlet;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;/***  @author: liman*  @Date: 2020/12/22 15:47*  @Description: FreeMarker 常见指令 :macro指令*/
@WebServlet("/f14")
public class FreeMarker14 extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//请求转发跳转到指定的模板页面 template/f01.ftlreq.getRequestDispatcher("template/f14.ftl").forward(req, resp);}
}

在webapp的template文件下面创建f14.ftl文件获取数据

<#-- 通过import指令引入命名空间 -->
<#import "f12.ftl" as f12>
<@f12.cfg></@f12.cfg>
<@f12.cfb02 num = 5></@f12.cfb02>
<@f12.address></@f12.address>

include包含指令

可以使用include指令在你的模板中插入另外一个FreeMarker模板文件。被包含模板的输出格式是在include标签出现的位置插入的。被包含的文件和包含它的模板共享变量,就像是被复制粘贴进去的一样。

创建Servlet,方便向对应页面进行跳转

package com.xxx.servlet;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;/***  @author: liman*  @Date: 2020/12/22 15:47*  @Description: FreeMarker 常见指令 :macro指令*/
@WebServlet("/f15")
public class FreeMarker15 extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//请求转发跳转到指定的模板页面 template/f01.ftlreq.getRequestDispatcher("template/f15.ftl").forward(req, resp);}
}

在webapp的template文件下面创建f15.ftl文件获取数据

<#-- 包含指令(引入其他页面文件)include -->
<#-- html文件 -->
<#include "test.html">
<#-- FreeMarker文件 -->
<#include "test.ftl">
<#-- txt文件 -->
<#include "test.txt">

test.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><h2>FreeMarker的使用</h2>
</body>
</html>

test.ftl

<h3>FreeMarker常用指令</h3>

test.xml

FreeMarker常用指令

FreeMarker常见指令的简单介绍—快速入门(二)相关推荐

  1. linux批量命令换行,Linux 下的这些高效指令,是你快速入门运维的神器

    原标题:Linux 下的这些高效指令,是你快速入门运维的神器 Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CPU的操作系统.它 ...

  2. el-admin框架简单解析-快速入门(前端部分)

    目录 el-admin 简单了解 使用框架的四大步 el-admin前端部分解析 前端Vue目录结构 Layout 布局 mixins 混入模式 router 路由 store 状态管理 utils ...

  3. Retrofit 最简单的快速入门及封装

    Retrofit是Square公司开发的一款针对Android网络请求的框架,Retrofit2底层基于OkHttp实现的,OkHttp现在已经得到Google官方认可,大量的app都采用OkHttp ...

  4. Retrofit 最简单的快速入门及自己封装

    简单介绍及官方文档的坑 官方文档 http://square.github.io/retrofit/ Retrofit是Square公司开发的一款针对Android网络请求的框架,Retrofit2底 ...

  5. ccs一个简单的快速入门

    文章目录 1. 什么是css 网址 1.1 什么是css 1.2 发展史. 2.快速入门 选择器 1.三大基本选择器 2. 层次选择器 3.结构伪类选择器 4. 属性选择器(常用) 样式 三大样式 3 ...

  6. Freemarker简单概述及其数据类型的简单学习—快速入门(一)

    FreeMarker的主要学习内容 一.FreeMarker概述 FreeMarker中文官方手册(可结合学习)http://freemarker.foofun.cn/ FreeMarker学习笔记源 ...

  7. 对CAN、USART、SPI、SCI等常见总线的简单介绍

     任何一个微处理器都要与一定数量的部件和外围设备连接,但如果将各部件和每一种外围设备都分别用一组线路与CPU直接连接,那么连线将会错综复杂,甚至难以实现.为了简化硬件电路设计.简化系统结构,常用一 ...

  8. 【Spark】介绍 快速入门

    目录 介绍 Spark and Hadoop Spark or Hadoop 核心模块 Spark Core Spark SQL Spark Streaming Spark MLlib Spark G ...

  9. Hadoop教程(一):简介、大数据解决方案、介绍快速入门

    Hadoop是一个开源框架,它允许在整个集群使用简单编程模型计算机的分布式环境存储并处理大数据.它的目的是从单一的服务器到上千台机器的扩展,每一个台机都可以提供本地计算和存储. "90%的世 ...

  10. Linux简单介绍(入门)

    Linux基础学习 一. Linux简介 1.Linux是什么? Linux是一种Unix类的操作系统. Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户 ...

最新文章

  1. 【Cocos2d入门教程二】Cocos2d-x基础概念
  2. ICLR 2019论文接收结果揭晓:24篇oral论文有没有你?
  3. linux不断安装操作系统,无人值守批量安装linux操作系统
  4. Applese 涂颜色
  5. Linux 进程间通讯详解一
  6. 管理计算机域内置账户改为用户账户,“管理计算机(域)的内置帐户”我给它改了名...
  7. 大数据时代,你的信息安全谁负责?
  8. OSPF通过MPLS ×××
  9. 第七次CCF-D:游戏
  10. 乘积取中法matlab,迭代取中法、乘同余法及混合同余法产生随机数方法
  11. bzoj3669(NOI2014)魔法森林
  12. JAVA共享图片管理系统毕业设计 开题报告.
  13. matlab图像取反_MATLAB图像处理例子
  14. 简单介绍谷歌关键词扩展工具
  15. 上传图片报413错误
  16. 自定义计时器_笑死我了_哈哈哈哈哈嗝儿
  17. 公网远程访问连接Minecraft我的世界服务器 - MCSM控制面板
  18. 【计算机图形学入门】笔记8:Shading 2着色(着色频率、图形管线、纹理映射)
  19. 提高win7系统运行速度的方法
  20. 诺基亚手机软件设计大赛

热门文章

  1. 远程桌面要求更改电源_远程工作实际上可以使老板动态改变电源
  2. Linux 修改密码出现“鉴定令牌操作错误”
  3. Python编程基础的应用
  4. Excel导入导出之easypoi用法
  5. 常用大数据核心技术有哪些?
  6. php编程基础与实例教程第二版课后,PHP编程基础与实例教程(第2版)
  7. ps动作保存不覆盖原文件_Photoshop从入门到精通:图像的基本操作,新建打开保存关闭文件...
  8. GIS地理信息系统相关整理
  9. Python+FFmpeg音视频格式转换
  10. cmd命令检查电脑配置情况