簡介
FreeMarker是一款模板引擎: 即一種基於模板和要改變的數據, 並用來生成輸出文本(HTML網頁、電子郵件、配置文件、源代碼等)的通用工具。 它不是面向最終用戶的,而是一個Java類庫,是一款程序員可以嵌入他們所開發產品的組件
JavaEE中的兩種開發方式
前后端不分離
要求程序員要掌握js,為了簡化頁面開發,引入頁面模板,頁面模板整體上來說又可以分為兩大類
前端模板
前端模板就是后綴為html的模板,代表就是Thymeleaf,這種模板有一個好處就是不需要服務端解析就能直接在瀏覽器中打開。
后端模板
必須經過服務端解析才能被瀏覽器展示出來的模板
- JSP
- Freemarker
- velocity
前后端分離
前后端分離的時候,后端純粹只是接口,沒有任何頁面。所有的頁面由前端完成,前端會使用相關的模板。
- Vue
- AngularJS
- React
HelloWorld案例
創建一個maven項目
整合spring和SpringMVC
引入freemarker
1.引入freemarker依賴
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.28</version>
</dependency>
2.創建freemarker變量文件
freemarker-var.properties

3.配置視圖解析器
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<!-- 開啟注解 -->
<mvc:annotation-driven></mvc:annotation-driven>
<!-- 開啟掃描 -->
<context:component-scan base-package="com.dpb.controller">
<!-- 只掃描指定路徑下的controller注解 -->
<context:include-filter type="annotation"
expression="org.springframework.stereotype.Controller" />
</context:component-scan>
<!-- 配置freemarker -->
<!-- 1.引入freemarker屬性文件 -->
<bean
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:freemarker-var.properties</value>
</list>
</property>
</bean>
<!-- 2.定義模板屬性 -->
<bean
class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<!-- 定義模板位置 -->
<property name="templateLoaderPath" value="/WEB-INF/ftl/" />
<!-- 編碼方式 -->
<property name="defaultEncoding" value="utf-8" />
<!-- 設置鍵值對 -->
<property name="freemarkerVariables">
<map>
<entry key="root" value="${root}"></entry>
</map>
</property>
<!--設置屬性值 -->
<property name="freemarkerSettings">
<props>
<prop key="template_update_delay">10</prop>
<prop key="locale">zh_CN</prop>
<prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>
<prop key="date_format">yyyy-MM-dd</prop>
<prop key="time_format">HH:mm:ss</prop>
<prop key="number_format">#.####</prop>
</props>
</property>
</bean>
<!-- 3.配置視圖解析器 -->
<bean
class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<!-- 生成view的類 -->
<property name="viewClass"
value="org.springframework.web.servlet.view.freemarker.FreeMarkerView" />
<!-- 配置后綴 -->
<property name="suffix" value=".ftl" />
<!-- 支持request覆蓋model -->
<property name="allowRequestOverride" value="true" />
<property name="allowSessionOverride" value="true" />
<property name="exposeRequestAttributes" value="true" />
<property name="exposeSessionAttributes" value="true" />
<property name="contentType" value="text/html;charset=utf-8" />
</bean>
</beans>
4.測試
在WEB-INF下創建 index.ftl

controller跳轉到index.ftl頁面
@Controller
public class UserController {
@RequestMapping("/hello")
public String hello(){
return "index";
}
}
http://localhost:8082/freemarker01/hello

插值規則
通用插值
字符串,數字,Boolean型,Date類型
@RequestMapping("/hello")
public String hello(Model m){
m.addAttribute("name", "張三");
m.addAttribute("age", 18);
m.addAttribute("enable", true);
m.addAttribute("birth",new Date());
return "index";
}
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>Hello Freemarker</h1>
${root}<br>
<hr>
${name}<br>
${age}<br>
<#-- 轉換規則 -->
${enable?string("true","false")}<br>
${birth?string("yyyy-MM-dd")}<br>
</body>
</html>

數字格式化插入
數字格式化插值可采用#{expr;format}形式來格式化數字,其中format可以是:
mX:小數部分最小X位
MX:小數部分最大X位
<#--定義變量-->
<#assign x=3.9876543>
<#assign y=6>
#{x;M2}<#--顯示3.99--><br>
#{y;M2}<#--顯示6--><br>
#{x;m3}<#--顯示3.988--><br>
#{y;m3}<#--顯示6.000--><br>

eclipse安裝Freemarker插件

重啟即可
