freemarker模板引擎,一篇文章看懂基本操作与进阶操作

1 前提

FreeMarker 是一款 模板引擎:在模板中,你可以专注于如何展现数据, 而在模板之外可以专注于要展示什么数据。
在这里插入图片描述

2 freemarker 特性

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3 FreeMarker环境搭建

1 创建maven环境

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
pom 文件里面配置

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.example</groupId>
  <artifactId>FreeMarkerDemo</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>FreeMarkerDemo Maven Webapp</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>

  <dependencies>
<!--    freemarker 的坐标-->
    <dependency>
      <groupId>org.freemarker</groupId>
      <artifactId>freemarker</artifactId>
      <version>2.3.23</version>
    </dependency>
<!--    servlet-api 的依赖-->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.0.1</version>
    </dependency>
  </dependencies>

  <build>
    <finalName>FreeMarkerDemo</finalName>

    <plugins>
      <!-- 配置Tomcat插件 ,用于启动项目 -->
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <!--如果不设置,则默认为猫的自定义端口,项目路径为http://localhost:默认端口/项目名  -->
        <configuration>
          <!--如果端口号改为8081:那么访问的时候路径的端口就要写成8081,否则404  -->
          <port>8080</port>
          <!-- 如果设置为/,则项目了路径为http://localhost:端口号 /-->
          <!-- 如果设置为/123,则项目了路径为http://localhost:端口号/123 -->
          <path>/123</path>
        </configuration>
      </plugin>
    </plugins>

  </build>
</project>

我们要告诉我们的项目,哪些是freemarker的资源,所以需要配置

在这里插入图片描述

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>
  
  <servlet>
    <servlet-name>freemarker</servlet-name>
    <servlet-class>freemarker.ext.servlet.FreemarkerServlet</servlet-class>
    <init-param>
<!--      模板路径-->
      <param-name>TemplatePath</param-name>
<!--      默认在webapp 目录下查找对应的模板文件-->
      <param-value>/</param-value>
    </init-param>

    <init-param>
<!--      模板默认的编码-->
      <param-name>default_encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </servlet>
<!--  处理所有的以.ftl结尾的文件;ftl是freemarker默认的文件后缀-->
<servlet-mapping>
  <servlet-name>freemarker</servlet-name>
  <url-pattern>*.ftl</url-pattern>
</servlet-mapping>
</web-app>

4 简单demo测试创建

在这里插入图片描述


@WebServlet("/f01")
public class FreeMarker01 extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        给模板的数据
        req.setAttribute("msg","hello word");
//        请求转发到指定的页面,
        req.getRequestDispatcher("template/f01.ftl").forward(req,resp);

    }
}

在这里插入图片描述
启动项目,因为已经有插件,所以直接使用maven进行启动

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5 数据类型

在这里插入图片描述

5.1 布尔类型

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
ftl文件里面,直接将Boolean类型的值进行展示,是会出错的,会有上面的提示;

在这里插入图片描述
在这里插入图片描述

5.2 日期类型

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

    <h2>日期格式</h2>
        ${createTime?date} <br>
        ${createTime?time}  <br>
        ${createTime?datetime}  <br>
        ${createTime?string("yyyy/MM/dd HH:mm:ss")}

在这里插入图片描述

5.3 数值类型

在这里插入图片描述

<h2>数值类型</h2>
${age} <br>
${num} <br>
${avg} <br>
<#--数字过长,会有逗号,可以这样去掉逗号-->
${num?c}<br>
<#-- 将数值转换成货币类型-->
${num?string.currency}<br>
<#--将数值转换为百分比的字符串-->
${avg?string.percent}<br>

在这里插入图片描述

5.4 字符串类型

在这里插入图片描述

在这里插入图片描述

<h2>字符串类型</h2>
原数据--------转后数据<br>
字符串截取
${stringxx}---${stringxx?substring(0,2)}  <br>
首字母小写输出
${stringxx}---${stringxx?uncap_first}  <br>
首字母大写输出
${stringxx}---${stringxx?cap_first}  <br>
字母转小写输出
${stringxx}---${stringxx?lower_case}  <br>
字母转大写输出
${stringxx}---${stringxx?upper_case}  <br>
获取字符串长度
${stringxx}---${stringxx?length}  <br>
是否以指定的字母开头(Boolean类型)
${stringxx}---${stringxx?starts_with("str")?string}  <br>
是否以指定的字母结尾(Boolean类型)
${stringxx}---${stringxx?ends_with("str")?string}  <br>
获取指定字符的索引
${stringxx}---${stringxx?index_of("s")}  <br>
去除字符串前后空格
${stringxx}---${stringxx?trim}  <br>
替换指定字符串
${stringxx}---${stringxx?replace("s","ggg")}  <br>

5.5 字符串空值情况处理

在这里插入图片描述

5.6 sequence 类型

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

5.7 hash类型


<h2>hashmap</h2>
<br>
key遍历输出:<br>
<#list hashmap?keys  as key>
<#-- starts 是list,star 是遍历出来的每一个元素   -->
    ${key} ------${hashmap[key]} <br>
</#list>
<br>
value遍历输出:<br>
<#list hashmap?values  as value>
<#-- starts 是list,star 是遍历出来的每一个元素   -->
    ${value}  <br>
</#list>
<br>

在这里插入图片描述

6 常见指令

6.1 assign 自定义变量指令

在这里插入图片描述

<#--定义一个变量-->
<#assign str= "hello"  >
${str}<br>
<#--定义多个变量-->
<#assign str1="world" intx=1>
${str1}<br>
${intx}

6.2 if elseif else 逻辑判断指令

在这里插入图片描述

<h3>简单判断</h3>
<#assign str1=10>
<#if str1 lt 60>
    <h6>你太菜了</h6>
    <#elseif str1 =60 >
    <h6>还好</h6>
    <#else>
</#if>

<h3>判断数据是否存在</h3>
<#assign  list = "">
<#if list??>
    数据存在
    <#else>
    数据不存在
</#if>

6.3 list遍历指令

在这里插入图片描述

<h3>list 指令</h3>
<#assign userslist = ["lili","huhu","yueyue"]>
<#list userslist as user>
    ${user}
</#list>
<#list userslist as user>
    数据存在
    <#else>
    数组里面么有数据,走这个逻辑,避免空数据
</#list>

6.4 marco 自定义指令

自定义指令

在这里插入图片描述

<h1>自定义指令(宏)</h1>
<br>
<#--定义一个宏,相当于定义一个变量,名称是address-->
<#macro address>
    我是定义的变量的值
</#macro>
<#--使用宏-->
<br>
<@address></@address>
定义一个有参数的宏
<br>
<#macro address11  name age>
    我的名字是:${name} ,年龄是:${age}
</#macro>
<br>
展示宏里面的东西:
<br>
<@address11 name="lili" age=5></@address11>

6.5 nested 占位指令

在这里插入图片描述

6.6 import 导入指令

在这里插入图片描述

6.7 include 包含指令

在这里插入图片描述

6.8 visit

visit 指令是用来递归处理树的。

6.9 Recurse

在这里插入图片描述

6.10 Fallback

7 运算符

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一写代码就开心

你的打赏将是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值