【JavaWeb】FreeMarker快速入门
FreeMarker
Freemarker是免费开源的模板引擎技术;
Freemarker脚本为Freemarker Template Language;
Freemarker提供了大量内建函数来简化开发;
JSP与Freemarker
| JSP | Freemarker | |
|---|---|---|
| 官方标准 | 是 | 否 |
| 执行方式 | 编译型 | 解释型 |
| 执行效率 | 高 | 低 |
| 开发效率 | 低 | 高 |
| 扩展能力 | 弱 | 强 |
| 数据提取 | 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>
【JavaWeb】FreeMarker快速入门的更多相关文章
- FreeMarker 快速入门
FreeMarker 快速入门 FreeMarker是一个很值得去学习的模版引擎.它是基于模板文件生成其他文本的通用工具.本章内容通过如何使用FreeMarker生成Html web 页面 和 代码自 ...
- springboot2.0整合freemarker快速入门
目录 1. 快速入门 1.1 创建工程pom.xml文件如下 1.2 编辑application.yml 1.3 创建模型类 1.4 创建模板 1.5 创建controller 1.6 测试 2. F ...
- FreeMarker快速入门
虽然当前比较推荐使用thymeleaf替代jsp作为java网页开发的模板语言,不过公司推荐使用freemarker,那就顺势而为,速度学一发,然后迅速开始新项目了. 简介 FreeMarker第一个 ...
- 【FreeMarker】FreeMarker快速入门(一)
什么是 FreeMarker FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具. 它不是面向最终用户 ...
- SpringMVC总结一:快速入门
MVC: MVC是一种架构模型,本身没有什么功能,只是让我们的项目结构更加合理,流程控制更加清晰,一般包含三个组件: **Model(模型)**:数据模型,用于提供要展示的数据.一般包含数据和行为 ...
- 零基础快速入门SpringBoot2.0教程 (三)
一.SpringBoot Starter讲解 简介:介绍什么是SpringBoot Starter和主要作用 1.官网地址:https://docs.spring.io/spring-boot/doc ...
- MyBatis学习总结(一)——MyBatis快速入门
一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...
- MyBatis快速入门
一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...
- MyBatis学习总结(一)——MyBatis快速入门(转载)
本文转载自http://www.cnblogs.com/jpf-java/p/6013537.html MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了 ...
随机推荐
- IDEA中新建SpringBoot项目时提示:Artifact contains illegal characters
场景 一步一步教你在IEDA中快速搭建SpringBoot项目: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/87688277 ...
- BeanUtils.populate()空字符串转换日期的解决办法
我们在使用beanutils.populate()封装参数时,如果封装的字符串是空,在转换成date时会出现以上异常,此时可以在工具类中添加静态代码块即可解决:注意导入beanutils 包 impo ...
- js的try catch使用心得
1 try catch的使用,永远应该放在你的控制范围之内,而不应该防范未知的错误.也就是说你很清楚知道这里是有可能”出错“的,而且你很清楚知道什么前提下会出错,你就是要故意利用报错信息来区分错误 ...
- 介绍Dynamics 365 Customer Engagement中的备用键(alternate key)
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
- 36-Docker 的两类存储资源
我们从本章开始讨论 Docker 存储. Docker 为容器提供了两种存放数据的资源: 由 storage driver 管理的镜像层和容器层. Data Volume. 我们会详细讨论它们的原理和 ...
- 获取当前Linux的外网地址
有时候我们在测试配置外网IP是不是成功时,我们需要使用一些命令,使用 ssh 登录可以查看ip, 还有一种可以使用命令: curl ifconfig.me 进行方便获取,公网IP:真的是非常好的服务: ...
- 如何查找jdk安装路径也就是JAVA_HOME配置的环境变量
- R-2 - 正态分布-中心极限-置信区间-正态假设检验
本节内容 1:样本估计总体均值跟标准差,以及标准误 2:中心极限定理 3:如何查看数据是否是正态分布QQ图 4:置信区间的理解跟案例 5:假设检验 参考文章: 假设检验的学习和理解 一.样本估计总体均 ...
- JVM-Jinfo命令
jinfo JVM Configuration info这个命令作用是实时查看和调整虚拟机运行参数. 之前的jps -v口令只能查看到显示指定的参数,如果想要查看未被显示指定的参数的值就要使用jinf ...
- Django中的response
render_to_response render_to_response('index.html', locals(),context_instance=RequestContext(request ...