目录
- 1 前提
- 2 freemarker 特性
- 3 FreeMarker环境搭建
- 4 简单demo测试创建
- 5 数据类型
- 5.1 布尔类型
- 5.2 日期类型
- 5.3 数值类型
- 5.4 字符串类型
- 5.5 字符串空值情况处理
- 5.6 sequence 类型
- 5.7 hash类型
- 6 常见指令
- 6.1 assign 自定义变量指令
- 6.2 if elseif else 逻辑判断指令
- 6.3 list遍历指令
- 6.4 marco 自定义指令
- 6.5 nested 占位指令
- 6.6 import 导入指令
- 6.7 include 包含指令
- 7 运算符
1 前提
2 freemarker 特性
3 FreeMarker环境搭建
1 创建maven环境
pom 文件里面配置
代码语言:javascript复制<?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的资源,所以需要配置
代码语言:javascript复制<!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测试创建
代码语言:javascript复制@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 日期类型
代码语言:javascript复制 <h2>日期格式</h2>
${createTime?date} <br>
${createTime?time} <br>
${createTime?datetime} <br>
${createTime?string("yyyy/MM/dd HH:mm:ss")}
5.3 数值类型
代码语言:javascript复制<h2>数值类型</h2>
${age} <br>
${num} <br>
${avg} <br>
<#--数字过长,会有逗号,可以这样去掉逗号-->
${num?c}<br>
<#-- 将数值转换成货币类型-->
${num?string.currency}<br>
<#--将数值转换为百分比的字符串-->
${avg?string.percent}<br>
5.4 字符串类型
代码语言:javascript复制<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类型
代码语言:javascript复制<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 自定义变量指令
代码语言:javascript复制<#--定义一个变量-->
<#assign str= "hello" >
${str}<br>
<#--定义多个变量-->
<#assign str1="world" intx=1>
${str1}<br>
${intx}
6.2 if elseif else 逻辑判断指令
代码语言:javascript复制<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遍历指令
代码语言:javascript复制<h3>list 指令</h3>
<#assign userslist = ["lili","huhu","yueyue"]>
<#list userslist as user>
${user}
</#list>
<#list userslist as user>
数据存在
<#else>
数组里面么有数据,走这个逻辑,避免空数据
</#list>
6.4 marco 自定义指令
自定义指令
代码语言:javascript复制<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>