1.什么是FreeMarker

FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写 
FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序 
虽然FreeMarker具有一些编程的能力,但通常由Java程序准备要显示的数据,由FreeMarker生成页面,通过模板显示准备的数据(如下图) 

2.FreeMarker特性

能够生成各种文本:HTML、XML、RTF、Java源代码等等 
易于嵌入到你的产品中:轻量级;不需要Servlet环境 
插件式模板载入器:可以从任何源载入模板,如本地文件、数据库等等 
你可以按你所需生成文本:保存到本地文件;作为Email发送;从Web应用程序发送它返回给Web浏览器

3. springMVC整合Freemarker

1.添加jar包

添加freemarker的jar,还需要额外添加spring-content-support的jar包,不然会报错。

2.然后再Spring的配置文件中添加对freemarker的配置

<!-- 配置freeMarker的模板路径 -->  <bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> <property name="templateLoaderPath" value="WEB-INF/ftl/" /> <property name="defaultEncoding" value="UTF-8" /> </bean> <!-- freemarker视图解析器 --> <bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"> <property name="suffix" value=".html" /> <property name="contentType" value="text/html;charset=UTF-8" /> <!-- 此变量值为pageContext.request, 页面使用方法:rc.contextPath --> <property name="requestContextAttribute" value="rc" /> </bean> 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

3.写一个User类:

package com.my.springmvc.bean;public class User {private String username;private String password;public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

4.一个FreeMarkerController类:

@Controller
@RequestMapping("/home")
public class FreeMarkerController { @RequestMapping("/index") public ModelAndView Add(HttpServletRequest request,HttpServletResponse response){ User user = new User(); user.setUsername("sg"); user.setPassword("1234"); List<User> users = new ArrayList<User>(); users.add(user); ModelAndView mv = new ModelAndView(); mv.setViewName("index"); mv.addObject("users",users); return mv; } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

5.然后再WEB-INF/ftl目录下创建一个index.html文件:

##

<!DOCTYPE html>
<html>
<head> <meta charset="UTF-8"> <title>another</title> </head> <body> <#list users as user> username : ${user.username}<br/> password : ${user.password} </#list> </body> </html>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

结果:

4.freemarker语法介绍:

1. FreeMarker模板文件主要由如下4个部分组成

文本:直接输出的部分 
注释:<#– … –> 格式部分,不会输出 
插值:即 ${…} 或 #{…} 格式的部分,将使用数据模型中的部分替代输出 
指令:FreeMarker 指定,和 HTML 标记类似,名字前加 # 予以区分,不会输出

<html>
<head><title>Welcome!</title> </head> <body> <#-- 注释部分 --> <#-- 下面使用插值 --> <h1>Welcome ${username} !</h1> <p>We have these animals:</p> <u1> <!-- 使用FTL指令 --> <#list animals as animal> <li>${animal.name} for ${animal.price} Euros</li> </#list> </u1> </body> </html 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

2.控制语句

<#if condition> ...
<#elseif condition2> ...
<#elseif condition3> ... <#else> <#switch value> <#case refValue1> ... <#break> <#case refValue2> ... <#break> <#case refValueN> ... <#break> <#default> ... </#switch>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

3判断变量是否存在

<#if readonly??></#if>
  • 1

4.防止空指针报错

变量名后用 ! 加默认值:${foo!”Default”},如果 foo 为 null 则输出 Default

5.普通的变量

这是最简单的情况,直接变量名称,如变量名称,如{name}

需要注意的是有的变量是需要转义的如双引号

6..遍历List集合

<#list ["克里斯埃文斯", "斯嘉丽约翰逊", "小罗伯特唐尼"]  as x>
${x} </#list> 
  • 1
  • 2
  • 3
  • 4

此外,迭代集合对象时,还包含两个特殊的循环变量: 
item_index:当前变量的索引值 
item_has_next:是否存在下一个对象 
也可以使用<#break>指令跳出迭代

7.运算符

FreeMarker表达式中完全支持算术运算,FreeMarker支持的算术运算符包括:+, - , * , / , % 
比较运算符

表达式中支持的比较运算符有如下几个: 
1,=或者==:判断两个值是否相等. 
2,!=:判断两个值是否不等. 
3,>或者gt:判断左边值是否大于右边值 
4,>=或者gte:判断左边值是否大于等于右边值 
5,<或者lt:判断左边值是否小于右边值 
6,<=或者lte:判断左边值是否小于等于右边值

注意:=和!=可以用于字符串,数值和日期来比较是否相等,但=和!=两边必须是相同类型的值,否则会产生错误,而且FreeMarker是精确比较,”x”,”x “,”X”是不等的.其它的运行符可以作用于数字和日期,但不能作用于字符串,大部分的时候,使用gt等字母运算符代替>会有更好的效果,因为FreeMarker会把>解释成FTL标签的结束字符,当然,也可以使用括号来避免这种情况,如:<#if (x>y)>

逻辑运算符

和普通程序一样,freemarker也有&&,|| ,!三种

8.变量的声明

<#assign num=0/>

9.include指令

include指令的作用类似于JSP的包含指令,用于包含指定页.include指令的语法格式如下: 
<#include filename [options]> 
在上面的语法格式中,两个参数的解释如下: 
filename:该参数指定被包含的模板文件 
options:该参数可以省略,指定包含时的选项,包含encoding和parse两个选项,其中encoding指定包含页面时所用的解码集,而parse指定被包含文件是否作为FTL文件来解析,如果省略了parse选项值,则该选项默认是true.

10.import指令

该指令用于导入FreeMarker模板中的所有变量,并将该变量放置在指定的Map对象中,import指令的语法格式如下: 
<#import “/lib/common.ftl” as com> 
上面的代码将导入/lib/common.ftl模板文件中的所有变量,交将这些变量放置在一个名为com的Map对象中.

11 macro的使用

这个可以用来实现自定义指令,一般用来做公共组件,例如分页条 
最后说下list中含有map的遍历,这种情况可以使用点语法或方括号语法.假如有下面的数据模型: 
Map root = new HashMap(); 
Book book = new Book(); 
Author author = new Author(); 
author.setName(“annlee”); 
author.setAddress(“gz”); 
book.setName(“struts2”); 
book.setAuthor(author); 
root.put(“info”,”struts”); 
root.put(“book”, book);

为了访问数据模型中名为struts2的书的作者的名字,可以使用如下语法: 
book.author.name //全部使用点语法 
book[“author”].name 
book.author[“name”] //混合使用点语法和方括号语法 
book[“author”][“name”] //全部使用方括号语法

参考: 
http://blog.csdn.net/walkcode/article/details/26393211 
http://blog.csdn.net/win_man/article/details/51317957 
http://rongjih.blog.163.com/blog/static/3357446120127632757911/ 
http://qtdebug.com/spring-web/11.%20Freemarker%20%E8%AF%AD%E6%B3%95%E7%AE%80%E4%BB%8B.html 
http://blog.csdn.net/walkcode/article/details/26393211 
http://blog.csdn.net/shimiso/article/details/8778793

转载于:https://www.cnblogs.com/shibashiaha/p/9268154.html

Spring mvc整合freemarker详解相关推荐

  1. java处理请求的流程_Java Spring mvc请求处理流程详解

    Spring mvc请求处理流程详解 前言 spring mvc框架相信很多人都很熟悉了,关于这方面的资料也是一搜一大把.但是感觉讲的都不是很细致,让很多初学者都云里雾里的.本人也是这样,之前研究过, ...

  2. Spring Boot 集成 FreeMarker 详解案例

    年轻就不应该让自己过得太舒服" – From yong 一.Springboot 那些事 SpringBoot 很方便的集成 FreeMarker ,DAO 数据库操作层依旧用的是 Myba ...

  3. Java程序员从笨鸟到菜鸟之(七十九)细谈Spring(八)spring+hibernate整合基本详解

    由于spring和hibernate处于不同的层次,Spring关心的是业务逻辑之间的组合关系,Spring提供了对他们的强大的管理能力, 而Hibernate完成了OR的映射,使开发人员不用再去关心 ...

  4. Spring MVC测试框架详解——服务端测试

    随着RESTful Web Service的流行,测试对外的Service是否满足期望也变的必要的.从Spring 3.2开始Spring了Spring Web测试框架,如果版本低于3.2,请使用sp ...

  5. spring mvc -@RequestMapping注解详解

    https://www.cnblogs.com/caoyc/p/5635173.html @RequestMapping参数说明: value:定义处理方法的请求的URL地址(重点): method: ...

  6. Spring MVC @RequestMapping注解详解

    @RequestMapping 参数说明 value:定义处理方法的请求的 URL 地址.(重点) method:定义处理方法的 http method 类型,如 GET.POST 等.(重点) pa ...

  7. 【Spring MVC学习】详解spring mvc 3.0常用注解

    Spring mvc的注解功能 1.@Controller--表示控制器 举例: @Controller public class SoftCreateController extendsSimple ...

  8. Struts+Spring+Hibernate整合入门详解

    标签: strutshibernatespringbeanactionimport 2007-08-12 16:05 36280人阅读 评论(13) 收藏 举报 分类: STRUTS&SPRI ...

  9. spring mvc 常用注解详解

    @Controller 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model , ...

最新文章

  1. python和java哪个-Python与Java-你首选哪个?
  2. jenkinsapi出现HTTPConnectionPool Max retires exceeded异常
  3. getchar()函数的一些知识
  4. 关于数据预处理的7个重要知识点,全在这儿了!
  5. 【Selenium 爬爬 猪 八 戒】
  6. centos镜像 from_下载 CentOS 7 镜像文件
  7. 在控制台远程连接mysql数据库时,出现ERROR 2049 (HY000)错误
  8. 如何确定windows启动类型是bios还是uefi
  9. [hadoop源码阅读][0]-初衷和各种资源
  10. 宝塔面板解除强制绑定手机账号限制教程
  11. Mac OS系统下安装Win10系统到移动硬盘
  12. 一个学生成绩管理系统c语言,一个学生成绩管理系统C语言源代码
  13. 飞秋2012、飞秋2013资源文件
  14. 华为云服务器销售话术技巧,云服务器销售话术
  15. android media player实现一个可手势滑动控制 + 可以调节分辨率|字幕|倍速的视频播放器(MediaPlayer + ExoPlayer实现)
  16. 有什么好用的软件推荐?
  17. Supervised Fitting of Geometric Primitives to 3D Point Clouds阅读笔记
  18. 枫叶蓝代码生成工具 和对服装行业的一些感悟
  19. java 获取当天0时0分0秒和 23时23分59秒 的时间
  20. shell脚本使用教程3

热门文章

  1. 网络爬虫:URL去重策略之布隆过滤器(BloomFilter)的使用
  2. java jndi 例子_MEJB附录B,jndi例子无法运行的问题
  3. 计算机网络平台实验,计算机网络实验
  4. ins40401 oracle,安装orace grid infrastructure 提示[INS-40404]问题
  5. 一不小心,它成为了 GitHub Alibaba Group 下 Star 最多的开源项目
  6. 基于函数计算的 BFF 架构
  7. 解锁云原生 AI 技能|在 Kubernetes 上构建机器学习系统
  8. 深入浅出 PouchContainer 容器化业务实践 Workshop 开放报名
  9. mysql数据库性能指标结果_MySQL数据库性能优化的关键参数(转)
  10. 台式电脑不拉网线上网_在家里想不拉宽带用无线上网,试试这几招?