FreeMarker模板使用方法讲解
項目需要,剛接觸,正在學習。
?
FreeMarker簡介
????? 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> </html>
?
在java程序中使用FreeMarker
??? FreeMarker的模板就是一個.ftl文本文件,在該文件中使用了一些FreeMarker的特別標記,這些標記會動態顯示,或者控制程序輸出,如下面的模板文件代碼:
? ${name},你好!${msg}
?? 這里類似于${}的就是動態的內容,稱作"插值".
?? 為了使用FreeMarker來將數據模型中的值合并到模板文件中,可按如下步驟進行:
????? 1,創建Configuration實例,該實例負責管理FreeMarker的模板加載路徑,負責生成模板實例
????? 2,使用Configuration實例來生成Template實例,同進需要指定使用的模板文件
????? 3,填充數據模型,數據模型就是一個Map對象
????? 4,調用Template實例的process方法完成合并.
?
下面是一個使用FreeMarker創建輸出的Java程序,程序源代碼如下:
import java.util.*; import java.io.*; import freemarker.template.*;public class HelloFreeMarker {private Configuration cfg; public void init() throws Exception {//初始化FreeMarker配置//創建一個Configuration實例cfg = new Configuration();//設置FreeMarker的模版文件位置cfg.setDirectoryForTemplateLoading(new File("templates"));}public void process()throws Exception {Map root = new HashMap();root.put("name", "FreeMarker!"); root.put("msg" , "您已經完成了第一個FreeMarker的示例");Template t = cfg.getTemplate("test.ftl");t.process(root, new OutputStreamWriter(System.out));}public static void main(String[] args)throws Exception {HelloFreeMarker hf = new HelloFreeMarker();hf.init();hf.process(); } }
上面的代碼創建了一個Map實例,這個Map將作為模板文件的數據模型,我們要使用FreeMarker必須導入freemarker.jar文件,FreeMarker的官網是http://freemarker.sourceforge.net/,雖然FreeMarker可以在Java程序中使用,但大部分時候還是用來生成HTML頁面.
?
在Web應用中使用FreeMarker
?
在Web應用中使用FreeMarker跟在Java程序中使用并沒有太大的區別.下面是一個在Web中使用的例子,用來生成HTML頁面的模板文件內容如下:
<html><head><title>FreeMarker的HelloWorld</title></head><body>${message}</body> </html>
我們在Web應用中使用FreeMarker時,應該讓Servlet來合并模板和數據,因此,Servlet負責創建Configuration實例,并負責合并模板和數據,下面是Servlet源代碼:
import java.util.*; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import freemarker.template.*;public class HelloServlet extends HttpServlet {private Configuration cfg; public void init() {//初始化FreeMarker配置//創建一個Configuration實例cfg = new Configuration();//設置FreeMarker的模版文件位置cfg.setServletContextForTemplateLoading(getServletContext(), "WEB-INF/templates");}public void service(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { //建立數據模型Map root = new HashMap();root.put("message", "Hello FreeMarker!"); //取得模版文件Template t = cfg.getTemplate("test.ftl"); // 開始準備生成輸出// - 使用模版文件的charset作為本頁面的charset// - 使用text/html MIME-typeresponse.setContentType("text/html; charset=" + t.getEncoding());Writer out = response.getWriter();//合并數據模型和模版,并將結果輸出到out中try{t.process(root, out);} catch (TemplateException e){throw new ServletException("處理Template模版中出現錯誤", e);}} }
?
可以看到這個Servlet類的代碼與普通的Java程序中使用FreeMarker大致一樣,區別有兩個:1,設置FreeMarker加載模板的方法不一樣,在Servlet中設置加載的方法是setServletContextForTemplateLoading,第一個參數是本web應用的ServletContext,第二個參數是模板文件的路徑.;2,結果必須輸出到HttpServletResponse中,才能被瀏覽器加載.
配置Servlet的web.xml文件中的代碼如下:
<web-app><servlet><servlet-name>hello</servlet-name><servlet-class>lee.HelloServlet</servlet-class></servlet><servlet-mapping><servlet-name>hello</servlet-name><url-pattern>/hello</url-pattern></servlet-mapping> </web-app>
?
?
?
?
?
總結
以上是生活随笔為你收集整理的FreeMarker模板使用方法讲解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ARM——cortex-A7核 按键中断
- 下一篇: A7\M4核串口实验