【JavaWeb】FreeMarker快速入門

FreeMarker

Freemarker是免費開源的模板引擎技術;html

Freemarker腳本爲Freemarker Template Language;java

Freemarker提供了大量內建函數來簡化開發;web

JSP與Freemarker

JSP Freemarker
官方標準
執行方式 編譯型 解釋型
執行效率
開發效率
擴展能力
數據提取 JSTL+EL 內置標籤

FreeMarker基本用法

<b style="color:red;">FreemarkerSample1.java</b>app

package freemarker;

import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.Map;

import freemarker.core.ParseException;
import freemarker.template.Configuration;
import freemarker.template.MalformedTemplateNameException;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import freemarker.template.TemplateNotFoundException;

public class FreemarkerSample1 {

	public static void main(String[] args) throws TemplateNotFoundException, MalformedTemplateNameException,
			ParseException, IOException, TemplateException {
		// 1.加載模板
		// 建立核心配置對象
		Configuration config = new Configuration(Configuration.VERSION_2_3_28);
		// 設置加載的目錄
		config.setClassForTemplateLoading(FreemarkerSample1.class, ""); // ""表明當前包
		// 獲得模板對象
		Template t = config.getTemplate("sample1.ftl");
		// 2.建立數據
		Map<String, Object> data = new HashMap<>();
		data.put("site", "百度");
		data.put("url", "http://www.baidu.com");
		// 3.產生輸出
		t.process(data, new OutputStreamWriter(System.out));
	}

}

<b style="color:red;">sample1.ftl</b>jsp

<#-- 這是註釋 -->
${site}-${url}

<b style="color:red;">控制檯輸出</b>函數

百度-http://www.baidu.com

FTL取值

  • ${屬性名} 取值,可對屬性進行計算
  • ${屬性名!默認值} 若是屬性不存在的話使用默認值
  • ${屬性名?string("")} 格式化輸出

分支判斷

<#-- if -->
<#if state == 1>
我是1
<#elseif state == 2>
我是2
</#if>
<#if user??> <#-- 判斷對象是否爲null -->
我不是null
</#if>

<#-- switch -->
<#switch state>
	<#case 1>
		我是1
		<#break>
	<#case 2>
		我是2
		<#break>
	<#default>
		其餘
</#switch>

list迭代

<#-- list迭代列表 -->
<#list students as stu>
 <li>${stu_index}-${stu.name}</li>
</#list>

<#-- list迭代Map -->
<#list map?keys as key>
	${key}:${map[key]}
</#list>

經常使用內建函數

函數名 說明 示例
lower_case/upper_case 大小寫轉換 "abcdefg"?upper_case
cap_first 首字母大寫 "jackson"?cap_first
index_of 查找字符索引 "abcdef"?index_of("b")
length 返回字符串長度 "abcdef"?length
round/floor/ceiling 四捨五入/下取整/上取整 pi?floor
size 獲得集合元素總數 students?size
first/last 獲取第一個/最後一個元素 students?first
sort_by 按某個屬性對集合排序 list?sort_by("time")
<#-- ?string能夠實現三目運算符的操做 -->
${(words?index_of("blood") != -1)?string("包含敏感詞彙", "不包含敏感詞彙")}

<#-- replace -->
${words?replace("blood", "*****")}

<#-- sort_by返回一個新的集合,默認升序排列 -->
<#-- reverse將順序反轉 -->
<#list computers?sort_by("price")?reverse as c>
	${c.sn}-${c.price}
</#list>

freemarker中文官方參考手冊: http://freemarker.foofun.cn/url

Freemarker與Servlet整合

配置FreemarkerServlet

<b style="color:red;">web.xml</b>spa

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>fm</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
  	<servlet-name>freemarker</servlet-name>
  	<servlet-class>freemarker.ext.servlet.FreemarkerServlet</servlet-class>
  	<init-param>
  		<param-name>TemplatePath</param-name>
  		<param-value>/WEB-INF/ftl</param-value>
  	</init-param>
  </servlet>
  <servlet-mapping>
  	<servlet-name>freemarker</servlet-name>
  	<url-pattern>*.ftl</url-pattern>
  </servlet-mapping>
</web-app>
相關文章
相關標籤/搜索