簡要說明
模板 + data-model = 輸出
<html>
<head>
<title>Welcome!</title>
</head>
<body>
<h1>Welcome Big Joe!</h1>
<p>Our latest product:
<a href="products/greenmouse.html">green mouse</a>!
</body>
</html>
現在我們考慮在 Welcome 後邊的人名 ("Big Joe") 是根據實際登錄網站頁面的用戶決定的,而且最新的商品是從數據庫中取出來的,那麼也就意味着這個商品的值可能隨時會改變。那麼在這樣的條件下我們就不能僅僅只是輸入一個確切的人名和最新的商品信息了,換句話說,不能是靜態頁面。<html>
<head>
<title>Welcome!</title>
</head>
<body>
<h1>Welcome ${user}!</h1>
<p>Our latest product:
<a href="${latestProduct.url}">${latestProduct.name}</a>!
</body>
</html>
這個文件如同通常的靜態 HTML 文件一樣是存儲在服務端的,但是只要有人訪問這個頁面時,FreeMarker就會介入啦,它會用最新的數據來替換掉模板中 ${...}標記的內容 (比如將${user}的內容替換爲 "Big Joe" 或者是其他登錄用戶的用戶名),將指定的模板轉換爲一般的 HTML 文件併發送到訪問者的瀏覽器中。其實這個時候訪問者接收到的數據就如同第一個例子一樣的 HTML 文本( 沒有任何 FreeMarker 指令的普通 HTML 文本),自然訪問者也不會意識到這個時候 FreeMarker 幫忙生成了這個 HTML。在這樣一個生成的過程中,存儲在服務端的那個模板文件並沒有被改變過,所以在每一次的訪問中這個生成過程是不斷髮生的。這樣的過程其實也就保證了顯示的信息始終是最新的。
(root)
|
+- user = "Big Joe"
|
+- latestProduct
|
+- url = "products/greenmouse.html"
|
+- name = "green mouse"
(以防誤解:data-model 並不是一個文本文件,上邊只是個便於理解的版本,對於數據結構有所瞭解的各位應該能明白這展示的是數據之間的關係罷了。這些都是Java對象,就讓我們把這些問題留給Java程序員吧)
Template + data-model = output