FreeMarker是一個用Java語言編寫的模板引擎,它基於模板來生成文本輸出。FreeMarker與Web容器無關,即在Web運行時,它並不知道Servlet或HTTP。它不僅可以用作表現層的實現技術,而且還可以用於生成XML,JSP或Java 等。
FreeMarker模板文件主要由如下4個部分組成:
1,文本:直接輸出的部分
2,註釋:<#-- ... -->格式部分,不會輸出
3,插值:即${...}或#{...}格式的部分,將使用數據模型中的部分替代輸出
4,FTL指令:FreeMarker指定,和HTML標記類似,名字前加#予以區分,不會輸出
下面是一個FreeMarker模板的例子,包含了以上所說的4個部分
<html><br> <head><br> <title>Welcome!</title><br> </head><br> <body><br> <#-- 註釋部分 --><br> <#-- 下面使用插值 --> <h1>Welcome ${user} !</h1><br> <p>We have these animals:<br> <u1><br> <#-- 使用FTL指令 --> <#list animals as being><br> <li>${being.name} for ${being.price} Euros<br> <#list><br> <u1><br> </body><br> </html>
FTL指令規則
在FreeMarker中,使用FTL標籤來使用指令,FreeMarker有3種FTL標籤,這和HTML標籤是完全類似的.
1,開始標籤:<#directivename parameter>
2,結束標籤:</#directivename>
3,空標籤:<#directivename parameter/>
實際上,使用標籤時前面的符號#也可能變成@,如果該指令是一個用戶指令而不是系統內建指令時,應將#符號改成@符號.
使用FTL標籤時, 應該有正確的嵌套,而不是交叉使用,這和XML標籤的用法完全一樣.如果全用不存在的指令,FreeMarker不會使用模板輸出,而是產生一個錯誤消息.FreeMarker會忽略FTL標籤中的空白字符.值得注意的是< , /> 和指令之間不允許有空白字符.
插值規則
FreeMarker的插值有如下兩種類型:1,通用插值${expr};2,數字格式化插值:#{expr}或#{expr;format}
Demo:
hello.ftl
<html> <head> <title>FreeMarker For JavaWeb</title> </head> <body> <h1 style = "color:blue">${name}</h1> <h1 style = "color:red">${message}</h1> </body> </html>Servleet:
FreeMarkerServlet.java
public class FreeMarkerServlet extends HttpServlet { private Configuration cfg = null; public void init() { cfg = new Configuration(); cfg.setServletContextForTemplateLoading(getServletContext(), "/template"); } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { Map<String, String> rootMap = new HashMap<String, String>(); rootMap.put("name", "name"); rootMap.put("message", "message"); try { Template template = cfg.getTemplate("hello.ftl"); template.process(rootMap, resp.getWriter()); } catch (Exception e) { } } }