FreeMarker

1.入门案例

1. 导包:freemarker.jar
2. 需要创建模板文件的路径:src/main/resources/template
3. 创建一个模板对象:hello.ftl
4. 创建一个模板输出路径:src/main/resources/result/hello.html
5. 测试类:FreeMarkerTest.java
public class FreeMarkerTest {
@Test
public void test() throws IOException, TemplateException {
//第一步:创建一个Configuration对象,直接new一个对象。构造方法的参数就是freemarker的版本号。
Configuration configuration = new Configuration();
//第二步:设置模板文件所在的路径。
File file=new File("src/main/resources/template");
configuration.setDirectoryForTemplateLoading(file);
//第三步:设置模板文件使用的字符集。一般就是utf-8.
configuration.setDefaultEncoding("utf-8");
//第四步:加载一个模板,创建一个模板对象。
Template template = configuration.getTemplate("hello.ftl");
//第五步:创建数据存放到map
Map data=new HashMap<String,Object>();
data.put("content","hello");
//存放map
Map user=new HashMap<String,String>();
user.put("username","zhangsan");
user.put("password","123456");
data.put("user",user);
//存放list
List<String> list=new ArrayList<>();
list.add("user1");
list.add("user2");
list.add("user3");
list.add("user4");
data.put("list",list);
//判断
data.put("gender","abc");
/*日期*/
data.put("birthday",new Date());
//模板信息输出到指定html
FileWriter fileWriter=new FileWriter(new File("src/main/resources/result/hello.html"));
//将数据映射到输出的html
template.process(data,fileWriter);
//关闭流
fileWriter.close();
}
}
6. hello.ftl:书写规范基本符合EL表达式
1. 直接获取键值对:${content}
2. 获取pojo,map
* ${user.username}
3. 遍历list
<#list list as user>
${user}||序号:${user_index+1}
</#list>
4. 判断
* <#if gender=="male">
男性
<#elseif gender=="female">
女性
<#else >
中性
</#if>
5. 判断值是否存在:存在就会打印出该值,否则什么都不打印
* ${content! ""}
6. 日期格式化: ${birthday?string("yyyy-MM-dd HH:mm:ss")}
7. include使用:
<#include "bey.ftl">:
注意:引用进来的文件也可以使用当前文件的数据值

2. Freemarker视图解析器

1. 导包
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.9</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>5.1.8.RELEASE</version>
</dependency>
2. 配置web应用
3. 注册Freemarker组件
1.  <!--freemarker的配置-->
<!--freemarker的config-->
<bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<!--模板的加载路径,可以作为prefix-->
<property name="templateLoaderPath" value="/WEB-INF/freemarker/"/>
<!--默认字符集-->
<property name="defaultEncoding" value="utf-8"/>
</bean>
<!--freemarker的视图解析器-->
<bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<!--视图解析器的后缀-->
<property name="suffix" value=".ftl"/>
</bean>
2. <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/view/"/>
<property name="suffix" value=".jsp"/>
<property name="viewNames" value="jsp_*"/>
</bean>
<!--freemarker的配置-->
<!--freemarker的config-->
<bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<!--模板的加载路径,可以作为prefix-->
<property name="templateLoaderPath" value="/WEB-INF/freemarker/"/>
<!--默认字符集-->
<property name="defaultEncoding" value="utf-8"/>
</bean>
<!--freemarker的视图解析器-->
<bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<!--视图解析器的后缀-->
<property name="suffix" value=".ftl"/>
<!--通过order属性,决定解析顺序-->
<property name="order" value="1"/>
<!--通过不同的view视图名分发给不同的解析器处理-->
<property name="viewNames" value="fm_*"/>
</bean>
和jsp视图解析器共存
1. 配置了同一个页面:视图解析器注册在前的,先执行
2. 配置不同的页面时:
* Freemark解析器比较温和,如果view视图在freemarker的解析器下找不到页面,继续找下一个视图解析器
* Jsp视图解析器比较霸道,如果view视图在jsp的解析器下找不到页面,不继续找,404
* 在配置后缀的bean标签中增加,通过order属性,决定解析顺序
* <property name="order" value="1"/>
3. 通过不同的view视图名分发给不同的解析器处理
* return "jsp_2";根据返回的视图去找对应的视图解析器
* <property name="viewNames" value="jsp_*"/>
* <property name="viewNames" value="fm_*"/>

10-SpringMVC04的更多相关文章

  1. Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级

    Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 5.安装Database软件 5. ...

  2. Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part1:准备工作

    Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part1:准备工作 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 1.实施前准备工作 1.1 服务器安装操 ...

  3. ArcGIS 10.0紧凑型切片读写方法

    首先介绍一下ArcGIS10.0的缓存机制: 切片方案 切片方案包括缓存的比例级别.切片尺寸和切片原点.这些属性定义缓存边界的存在位置,在某些客户端中叠加缓存时匹配这些属性十分重要.图像格式和抗锯齿等 ...

  4. CI Weekly #10 | 2017 DevOps 趋势预测

    2016 年的最后几个工作日,我们对 flow.ci Android & iOS 项目做了一些优化与修复: iOS 镜像 cocoapods 版本更新: fir iOS上传插件时间问题修复: ...

  5. 10个最好用的HTML/CSS 工具、插件和资料库

    大家在使用HTML/CSS开发项目的过程中,有使用过哪些工具,插件和库?下面介绍的10种HTML/CSS工具,插件和资料库,是国外程序员经常用到的. Firebug Lite FirebugLite ...

  6. 【Win 10 应用开发】启动远程设备上的应用

    这个功能必须在“红石-1”(build 14393)以上的系统版中才能使用,运行在一台设备上的应用,可以通过URI来启动另一台设备上的应用.激活远程应用需要以下前提: 系统必须是build 14393 ...

  7. 在Ubuntu 16.10安装mysql workbench报未安装软件包 libpng12-0错误

    1.安装mysql workbench,提示未安装软件包 libpng12-0 下载了MySQL Workbench 6.3.8   在安装的时候报错: -1ubu1604-amd64.deb 提示: ...

  8. Ubuntu 16.10 安装byzanz截取动态效果图工具

    1.了解byzanz截取动态效果图工具 byzanz能制作文件小,清晰的GIF动态效果图,不足就是,目前只能通过输入命令方式来录制. byzanz主要的参数选项有: -d, --duration=SE ...

  9. Ubuntu 16.10 安装KolourPaint 4画图工具

    KolourPaint 4画图工具简单实用,可以绘画.视频处理和图标编辑: • 绘画:绘制图表和“手绘” • 视频处理:编辑截图和照片;应用特效 • 图标编辑:绘画剪贴和标识透明化 1.在Ubuntu ...

  10. 【解决方案】Myeclipse 10 安装 GIT 插件 集成 步骤 图解

    工程开发中,往往要使用到集成GIT ,那么下面说说插件安装步骤 PS:以Myeclipse 10 为例,讲解集成安装步骤. ----------------------main------------ ...

随机推荐

  1. JSP九大内置对象之session以及eclispe如何关联源码

    一.session的特点及其实例 session:同一次会话共享 a.浏览网站:开始->关闭 b.购物:浏览.付款.退出 c.电子邮件:浏览.写邮件.退出  从一次开始到一次结束,是一次会话.  ...

  2. Tarjan强连通分量模板

    最好还是看一看下面这个网址吧 我的这篇博客里的代码更加缜密(毫无错误的神级代码)https://www.cnblogs.com/Tidoblogs/p/11315153.html https://ww ...

  3. DP-01背包 (题)

    nyoj 325   http://acm.nyist.net/JudgeOnline/problem.php?pid=325 zb的生日 时间限制:3000 ms  |  内存限制:65535 KB ...

  4. Appium自动化测试框架研究(2)——搭建IOS环境

    今天的文章讲iOS的Appium环境搭建. 对于iOS而言,只能在Mac笔记本上安装Appium,以及所需要的各种组件. 也许有人会问,能否在Windows系统上使用Appium测试iOS手机,这不就 ...

  5. excel中为什么不显示单引号

    解决:打两个就可以了!因为:一个单引号表示该单元格为文本属性.

  6. iocp性能分析

    网络上找iocp性能分析的文章很少,因工作关系,花了点时间特意从客观数据和理论角度分析了下iocp的性能 环境 CPU i7 4核8线程 1G网卡,echo方式测试(一个客户机模拟多个客户端模式,模拟 ...

  7. Beat our dice game and get the flag 击败我们的骰子游戏拿到旗子

    文件名:ebCTF-Teaser-BIN100-Dice.exe 话不多说 用PEID一看没壳 拖进OD 让我们摇出31337这五个数字才能拿到正确的flag cmp dword ptr ss:[eb ...

  8. 深入理解Java虚拟机:JVM高级特性与最佳实践

    第一部分走近Java第1章走近Java21.1概述21.2Java技术体系31.3Java发展史51.4Java虚拟机发展史91.4.1SunClassicExactVM91.4.2SunHotSpo ...

  9. NOI2019滚粗记

    Day -15 期末考完了,爆炸爆炸,就连数学和物理都错了好多傻*错误QwQ 哎呀管他的,NOI我来了! 跑到广附集训来了23333 Day -14 -- -2 做题,听题,哇和一群队爷在一个教室,真 ...

  10. 使用requests模块的网络编程

    python操作网络,也就是打开一个网站,或者请求一个http接口,本篇是介绍使用request模块的使用方式. 在使用requests模块之前需要先安装,在cmd中输入:pip install re ...