1. 程式人生 > >Spring Boot入門(四)——使用模板FreeMaker

Spring Boot入門(四)——使用模板FreeMaker

junit boot.s char pack utf put 常見 節點 簡單的

這周主要學習怎麽在Spring Boot中使用模板引擎FreeMaker,主要從以下幾方面進行學習。

(1) freemarker介紹:

FreeMarker是一款模板引擎: 即一種基於模板和要改變的數據, 並用來生成輸出文本(HTML網頁、電子郵件、配置文件、源代碼等)的通用工具。 它不是面向最終用戶的,而是一個Java類庫,是一款程序員可以嵌入他們所開發產品的組件。

(2) 新建spring-boot-freeMarker工程;

我們新建一個maven工程,取名為:spring-boot-freemarker

(3) 在pom.xml引入相關依賴;

這裏使用freeMarker需要引入相關依賴包:spring-boot-starter-freemarker

 1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 2   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 3   <modelVersion>4.0.0</modelVersion>
 4
5 <groupId>com.kfit</groupId> 6 <artifactId>spring-boot-velocity</artifactId> 7 <version>0.0.1-SNAPSHOT</version> 8 <packaging>jar</packaging> 9 10 <name>spring-boot-velocity</name> 11 <url>http://maven.apache.org</url>
12 13 <properties> 14 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 15 <!-- jdk版本號,angel在這裏使用1.8,大家修改為大家本地配置的jdk版本號即可 --> 16 <java.version>1.8</java.version> 17 </properties> 18 19 <!-- 20 spring boot 父節點依賴, 21 引入這個之後相關的引入就不需要添加version配置, 22 spring boot會自動選擇最合適的版本進行添加。 23 --> 24 <parent> 25 <groupId>org.springframework.boot</groupId> 26 <artifactId>spring-boot-starter-parent</artifactId> 27 <version>1.4.1.RELEASE</version><!-- 1.4.1.RELEASE , 1.3.3.RELEASE--> 28 </parent> 29 30 <dependencies> 31 <dependency> 32 <groupId>junit</groupId> 33 <artifactId>junit</artifactId> 34 <scope>test</scope> 35 </dependency> 36 37 <!-- spring boot web支持:mvc,aop... --> 38 <dependency> 39 <groupId>org.springframework.boot</groupId> 40 <artifactId>spring-boot-starter-web</artifactId> 41 </dependency> 42 43 <!-- 引入freeMarker的依賴包. --> 44 <dependency> 45 <groupId>org.springframework.boot</groupId> 46 <artifactId>spring-boot-starter-freemarker</artifactId> 47 </dependency> 48 49 </dependencies> 50 </project>

(4) 編寫啟動類;

啟動類沒有什麽特別之處,不過多介紹,請看代碼:

 1 package com.kfit;
 2  
 3 import org.springframework.boot.SpringApplication;
 4 import org.springframework.boot.autoconfigure.SpringBootApplication;
 5  
 6 @SpringBootApplication
 7 public class App {
 8     publicstaticvoid main(String[] args) {
 9        SpringApplication.run(App.class, args);
10     }
11 }

(5) 編寫模板文件hello.ftl;

編寫一個hello.ftl文件,此文件的路徑在src/main/resources/templates下,其中hello.ftl文件的內容如下:

1 <html> 
2 <body> 
3     welcome ${name}  to freemarker!
4 </body> 
5 </html>

(6) 編寫訪問類HelloController;

有了模板文件之後,我們需要有個Controller控制類,能夠訪問到hello.ftl文件,這裏也很簡單,具體看如下代碼:

 1 package com.kfit.demo.web;
 2  
 3 import java.util.Map;
 4  
 5 import org.springframework.stereotype.Controller;
 6 import org.springframework.web.bind.annotation.RequestMapping;
 7  
 8 @Controller
 9 public class HelloController {
10    
11     @RequestMapping("/hello")
12     public String hello(Map<String,Object> map){
13        map.put("name", "[zsliu]");
14        return "hello";
15     }
16    
17 }

(7) 測試;

好了,到這裏,我們就可以啟動我們的程序進行測試了,訪問地址:

http://127.0.0.1:8080/hello ,如果你在瀏覽器中看到如下信息:

welcome [zsliu] to freemarker! 那麽說明你的demo ok 了。

(8) freemarker配置;

在spring boot的application.properties屬性文件中為freemarker提供了一些常用的配置,如下:

 1 ########################################################
 2 ###FREEMARKER (FreeMarkerAutoConfiguration)
 3 ########################################################
 4 spring.freemarker.allow-request-override=false
 5 spring.freemarker.cache=true
 6 spring.freemarker.check-template-location=true
 7 spring.freemarker.charset=UTF-8
 8 spring.freemarker.content-type=text/html
 9 spring.freemarker.expose-request-attributes=false
10 spring.freemarker.expose-session-attributes=false
11 spring.freemarker.expose-spring-macro-helpers=false
12 #spring.freemarker.prefix=
13 #spring.freemarker.request-context-attribute=
14 #spring.freemarker.settings.*=
15 #spring.freemarker.suffix=.ftl
16 #spring.freemarker.template-loader-path=classpath:/templates/ #comma-separated list
17 #spring.freemarker.view-names= # whitelist of view names that can be resolved

(9) freemarker常用語法;

freemarker的語法並不是本節的重點,這裏還是簡單的介紹下幾個常用的if else,list;

首先我們改造下HelloController的hello方法

 1 @RequestMapping("/hello")
 2    public String hello(Map<String,Object> map){
 3        map.put("name", "[zsliu]");
 4        map.put("gender",1);//gender:性別,1:男;0:女;
 5       
 6        List<Map<String,Object>> friends =new ArrayList<Map<String,Object>>();
 7        Map<String,Object> friend = new HashMap<String,Object>();
 8        friend.put("name", "張三");
 9        friend.put("age", 20);
10        friends.add(friend);
11        friend = new HashMap<String,Object>();
12        friend.put("name", "李四");
13        friend.put("age", 22);
14        friends.add(friend);
15        map.put("friends", friends);
16        return "hello";
17     }

這裏我們返回了gender和friends的列表, 接下來我們看看怎麽在freemarker進行展示呢?

 1 <!DOCTYPE html>
 2 <html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"
 3       xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
 4     <head>
 5         <title>Hello World!</title>
 6     </head>
 7     <body>
 8        <p>
 9            welcome ${name}  to freemarker!
10        </p>      
11       
12       
13        <p>性別:
14            <#if gender==0>
15 16            <#elseif gender==1>
17 18            <#else>
19               保密   
20            </#if>
21         </p>
22       
23       
24        <h4>我的好友:</h4>
25        <#list friends as item>
26            姓名:${item.name} , 年齡${item.age}
27            <br>
28        </#list>
29       
30     </body>
31 </html>

10) freemarker layout

freemarker layout主要處理具有相同內容的頁面,比如每個網站的header和footer頁面。

freemarker 的布局主要常見的兩種方式是#import(“文件路徑”)和#include(“文件路徑”),其中import和include的區別在於,include常用於公共部分的頁面,如果要使用<#assign username=“張三”>涉及到內部函數以及變量聲明之類的,使用import進行導入,如果在import中的頁面含有頁面當前將不會進行渲染。 我們編寫一個header和footer,其中的header使用include引入,footer頁面也使用include引入。

header.ftl內容:

1 <header>
2     This is a header,welcome  ${name} to my web site!
3 </header>
4 <hr>

footer.ftl內容:

1 <hr>
2 <footer>
3     This is a footer,welcome  ${name} to my web site!
4 </footer>

修改hello.ftl:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"
      xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
    <head>
        <title>Hello World!</title>
    </head>
    <body>
   
        <#include "/header.ftl" >
       
       <p>
           welcome ${name}  to freemarker!
       </p>      
      
      
       <p>性別:
           <#if gender==0><#elseif gender==1><#else>
              保密   
           </#if>
        </p>
      
      
       <h4>我的好友:</h4>
       <#list friends as item>
           姓名:${item.name} , 年齡${item.age}
           <br>
       </#list>
      
      
       <#include "/footer.ftl" >
    </body>
</html>

 到這裏就ok了,我們訪問/hello頁面,應該會看到修改後的效果:  

 END

Spring Boot入門(四)——使用模板FreeMaker