[springboot] 使用FreeMarker模板引擎渲染web视图

FreeMarker介绍

FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据,   并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。

引入依赖


    org.springframework.boot
    spring-boot-starter-freemarker

编写模板文件

编写一个hello.ftl文件,此文件的路径在src/main/resources/templates下,其中hello.ftl文件的内容如下:




    hello


 welcome ${name} to freemarker!

编写访问接口

@Controller
public class HelloController {

    @RequestMapping("/hello")
    public String hello(Map map){
        map.put("name", "Gentle Man");
        return "hello";
    }
}

启动测试

访问http://127.0.0.1:8080/hello ,浏览器中看到如下信息:

welcome Gentle Man to freemarker!

FreeMarker配置

# config for freekmarker

spring.freemarker.allow-request-override=false

spring.freemarker.cache=true

spring.freemarker.check-template-location=true

spring.freemarker.charset=UTF-8

spring.freemarker.content-type=text/html

spring.freemarker.expose-request-attributes=false

spring.freemarker.expose-session-attributes=false

spring.freemarker.expose-spring-macro-helpers=false

#spring.freemarker.prefix=

#spring.freemarker.request-context-attribute=

#spring.freemarker.settings.*=

#spring.freemarker.suffix=.ftl

#spring.freemarker.template-loader-path=classpath:/templates/ #comma-separated list

#spring.freemarker.view-names= # whitelist of view names that can be resolved

FreekMarker常用语法

这里还是简单的介绍下几个常用的if else,list,首先我们改造下HelloController的hello方法:

@Controller
public class HelloController {

    @RequestMapping("/hello")
    public String hello(Map map){
	map.put("name", "GentleMan");
	map.put("age", 23);
	map.put("gender", 1);//gender:性别,1:男;0:女;
	List> friends =new ArrayList>();
	Map friend = new HashMap();
	friend.put("name", "李蕾");
	friend.put("age", 21);
	friend.put("gender", 0);
	friends.add(friend);
	friend = new HashMap();
	friend.put("name", "张三");
	friend.put("age", 22);
	friend.put("gender", 1);
	friends.add(friend);
	map.put("friends", friends);
	return "hello";
    }
}

接下来我们看看怎么在freemarker进行展示:




    hello


    

welcome ${name} to freemarker!

姓名:${name} 年龄:${age} 性别: <#if gender==0> 女 <#elseif gender==1> 男 <#else> 保密

我的好友

<#list friends as item> 姓名:${item.name} , 年龄:${item.age} , 性别:${item.gender}

FreekMarker布局

freemarker layout主要处理具有相同内容的页面,比如每个网站的header和footer页面。freemarker 的布局主要常见的两种方式是#import(“文件路径”)和#include(“文件路径”),其中import和include的区别在于,include常用于公共部分的页面,如果要使用<#assign username=“张三”>涉及到内部函数以及变量声明之类的,使用import进行导入,如果在import中的页面含有页面当前将不会进行渲染。 我们编写一个header和footer,其中的header使用include引入,footer页面也使用include引入。(当然freemarker 还有别的布局方式,这里只是介绍一种,请自行学习研究)

header.ftl

This is a header, welcome ${name} to my web site!

footer.ftl


This is a footer, welcome ${name} to my web site!

main.ftl




    layout


    <#include "header.ftl">

    

This is content

<#include "footer.ftl">

增加访问接口

@RequestMapping("/layout")
public String layout(Map map){
    map.put("name", "迈克.杰克逊");
    return "main";
}

启动工程访问:http://127.0.0.1:8080/layout 效果如下:

 【小记】

1、spring boot  + freemarker 怎么获取contextPath?

在application.properties添加如下信息:

spring.freemarker.request-context-attribute=request

在x.ftl文件中进行使用:

${request.contextPath}

本文转载:Spring Boot使用模板freemarker

你可能感兴趣的:(SpringBoot)