上次我們探討了FreeMarker的模板組成,今天我們就來探討一下FreeMarker生成靜態(tài)頁原理。簡單說就是“模板”+“數(shù)據(jù)”=“靜態(tài)頁面輸出”,也就是將頁面中所需要的樣式放入FreeMarker模板文件中,然后將頁面所需要的數(shù)據(jù)動態(tài)綁定,并放入Map中,通過調(diào)用FreeMarker模板文件解析類process()方法完成靜態(tài)頁面的生成。如圖所示:
了解過FreeMarker生成靜態(tài)頁的原理之后,我們就來通過一個實例更直觀的去剖析一下。
一、 創(chuàng)建一個簡單的FreeMarker模板文件user.ftl
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <meta http-equiv=Content-Type content="text/html; charset=utf-8">
- <title>user.ftl</title>
- </head>
- <body>
- ${user.userName}
- ${user.userPassword}
- </body>
- </html>
二、 創(chuàng)建FreeMarker模板文件動態(tài)綁定的數(shù)據(jù)的對象類User.java
- public class User{
- private String userName;
- private String userPassword;
-
- public String getUserName(){
- return userName;
- }
- public void setUserName(String userName){
- this.userName=userName;
- }
-
- public String getUserPassword(){
- return userPassword;
- }
- public void setUserName(String userPassword){
- this.userPassword=userPassword;
- }
- }
三、 創(chuàng)建FreeMarker模板文件解析器工具類FreeMarkertUtil.java
- //省略包的導(dǎo)入
- Public class FreeMarkerUtil{
- //templatePath模板文件存放路徑
- //templateName 模板文件名稱
- //filename 生成的文件名稱
- public static void analysisTemplate(String templatePath,String templateName,
- String fileName,Map<?,?>root){
- try {
- Configuration config=new Configuration();
- //設(shè)置要解析的模板所在的目錄,并加載模板文件
- config.setDirectoryForTemplateLoading(new File(templatePath));
- //設(shè)置包裝器,并將對象包裝為數(shù)據(jù)模型
- config.setObjectWrapper(new DefaultObjectWrapper());
- //獲取模板,并設(shè)置編碼方式,這個編碼必須要與頁面中的編碼格式一致
- //否則會出現(xiàn)亂碼
- Template template=config.getTemplate(templateName,“UTF-8”);
- //合并數(shù)據(jù)模型與模板
- FileOutputStream fos = new FileOutputStream(fileName);
- Writer out = new OutputStreamWriter(fos,“UTF-8”);
- template.process(root, out);
- out.flush();
- out.close();
- } catch (IOException e) {
- e.printStackTrace();
- }catch (TemplateException e) {
- e.printStackTrace();
- }
- }
- }
四、 創(chuàng)建FreeMarker生成靜態(tài)頁面測試類ClientTest.java
- //省略包的導(dǎo)入
- public class ClientTest{
- public static void main(String[] args){
- //生成數(shù)據(jù)Map,實際使用中這里可以是數(shù)據(jù)庫查詢出的數(shù)據(jù)
- User user=new User();
- user.setUserName("Csyor");
- user.setUserPassword("123456");
- Map<String,Object> root=new HashMap<String, Object>();
- root.put("user", user);
- //下面是你定義模板的路徑
- String templatesPath="D:/MyEclipse/workspaces/freeMaker/templates";
- //下面是模板的名稱
- String templateFile="/user.ftl";
- //下面是靜態(tài)頁面輸出路徑
- String htmlFile=templatesPath+"/user.html";
- //根據(jù)模板生成靜態(tài)頁面
- FreeMarkertUtil.analysisTemplate(templatesPath,templateFile,htmlFile,root);
- }
- }
至此,一個簡單的FreeMarker生成靜態(tài)頁面的實例已經(jīng)完成,在你指定的靜態(tài)頁面路徑(htmlFile)中已經(jīng)有一個和你定義的模板(user.ftl)格式一樣的靜態(tài)文件。當(dāng)然實際使用過程中不要忘記導(dǎo)入freemarker.jar,而且FreeMarker不只是能夠生產(chǎn)前臺view頁面,也可以根據(jù)實際情況生產(chǎn).java、.jsp、.xml等文件。
本文固定鏈接: http://www./185.html - 穿梭于偶然
|