Freemarker是免費開源的模板引擎技術;html
Freemarker腳本爲Freemarker Template Language;java
Freemarker提供了大量內建函數來簡化開發;web
JSP | Freemarker | |
---|---|---|
官方標準 | 是 | 否 |
執行方式 | 編譯型 | 解釋型 |
執行效率 | 高 | 低 |
開發效率 | 低 | 高 |
擴展能力 | 弱 | 強 |
數據提取 | JSTL+EL | 內置標籤 |
<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
<#-- 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 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
<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>