Java: FreeMarker的配置和使用

來源:互聯網
上載者:User

標籤:

初學什麼都不可以忽略的地方就是這個東西的官方網站:http://freemarker.org/。下載或者API都可以參考這裡。

FreeMarker是什麼

非常的簡單明了。FreeMarker是一個java包。實現了MVC模式,分離開發人員和設計師。也就是分離html也java的代碼。

 

FreeMarker是如何工作的

這是官網的圖。非常明確的說明了FreeMarker是如何運作的。首先需要有一個template模板,在那裡就是一堆的html標籤和一些專屬FreeMarker的標籤,這些標籤之後會被具體的資料代替。這些資料就是有左下的Java objects提供。<FreeMarker>就是工程中的Jar包。他把這些模板和Java objects的資料加工組合之後輸出html頁面。所以,FreeMarker的功能,就如官網中一直強調的,不是別的而是一個模板引擎。

在工程中最後把這些捏合在一起,讓他們彼此知道、協同工作的是web.xml設定檔。這裡先介紹web.xml的配置,之後具體說明如何一步一步的添加設定檔中涉及到的模板、java objects等。這樣有利於讀者從總體出發逐步把握每一個相關的細節。

<?xml version="1.0" encoding="UTF-8"?><web-app version="3.0"     xmlns="http://java.sun.com/xml/ns/javaee"     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee     http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">    <servlet>        <servlet-name>Test</servlet-name>        <servlet-class>example.Test</servlet-class>    </servlet>    <servlet-mapping>        <servlet-name>Test</servlet-name>        <url-pattern>*.do</url-pattern>    </servlet-mapping>  <welcome-file-list>    <welcome-file>index.jsp</welcome-file>  </welcome-file-list></web-app>

配置依次說明了:有一個叫Test的servlet,對應在代碼的example包的Test類。這個類的名字可以隨便起,其他的節點在配置的時候使用的知識servlet-name,然後他會找到這個類。下面的servlet-mapping在url中訪問*.do的時候會訪問這個servlet-name為Test的節點配置的類。之後,在index.jsp中添加一個指向*.do的超連結。整個的整個測試專案就可以run起來了。

按照MVC的方式理解。在servlet-name中配置的類就是Controller。View就是模板。Model就是之後在HashMap中的資料。下面依次建立在設定檔中直接或者間接需要用到的代碼。

添加可啟動並執行代碼

這裡假設你已經建立了一個web project,這個project的名字叫做test。首先建立模板。一定要在WebRoot目錄下建立一個templates目錄。然後在裡面添加尾碼為ftl(freemarker template的縮寫),名稱為Test的模板。在設定檔中沒有出現模板叫什麼,所以這裡你可以隨便命名這個模板檔案。這個檔案之後會在Controller中明確指定。不會出現找不到的問題。

代碼:

<!DOCTYPE html><html>  <head>    <title>Hello</title>  </head>    <body>    This is my HTML page. <br>    <h1>${user}</h1>  </body></html>

這個模板非常簡單。只在h1標籤中方了一個需要資料“user”的Freemarker標籤。這個“user”資料就是在之後的HashMap提供的。

然後添加Controller,也就是在web.xml設定檔中指定的example.Test類。首先在項目的根目錄下,建立一個“example”的包,然後在裡面添加一個Servlet。Servlet的名稱設定為Test。名字可以隨意起,但是在設定檔中的必須和這個類的名稱是一致的。

package example;import java.io.*;import java.util.*;import javax.servlet.ServletException;import javax.servlet.http.*;import freemarker.template.*;public class Test extends HttpServlet {        private Configuration _config;        public void init() {        // 初始化Freemarker配置        _config = new Configuration(Configuration.VERSION_2_3_0);        // 設定Freemarker模板檔案的位置        _config.setServletContextForTemplateLoading(this.getServletContext(), "templates");    }    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{        // 資料        Map root = new HashMap();        root.put("user", "Jack");                // 擷取模板        Template t = _config.getTemplate("Test.ftl");                // 準備輸出, 使用模板的編碼作為本頁的charset        response.setContentType("text/html; charset=" + t.getEncoding());        PrintWriter out = response.getWriter();                try{            // 在模板中加入動態資料            t.process(root, out);        }        catch(freemarker.template.TemplateException e){            throw new ServletException("處理Template模版中出現錯誤", e);        }    }}

代碼_config.setServletContextForTemplateLoading(this.getServletContext(), "templates");指定了模板檔案所在的目錄,以後的全部的Controller的模板檔案都是從這個地方找了,也就是前文指定的在WebRoot下建立的templates目錄。在後面的代碼Template t = _config.getTemplate("Test.ftl");中指定了具體的模板檔案是哪一個。Map root = new HashMap(); root.put("user", "Jack");指定了具體的資料Model。這個key值必須和在模板中設定的${user}一致。最後在方法t.process(root, out);中,把資料添加到模板中。通過這幾步以後,MVC的幾個部分就結合到了一起。

最後在index.jsp中添加一個超連結:<a href="Hello.do">Freemarker first page</a>。整個例子就可以運行了。看那看效果吧。

Freemarker是一個功能十分強大的模板引擎。不只有文中介紹的簡單的資料的替換,還有指令、宏等功能。非常好用。

 

 

參考:

http://freemarker.org/docs/

http://gqsunrise.iteye.com/blog/1659118

Java: FreeMarker的配置和使用

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.