002_模板 + 数据模型 = 输出
1. 假設在一個在線商店的應用系統中需要一個html頁面, 和下面這個頁面類似:
<!DOCTYPE html> <html><head><title>手機專賣</title><meta charset="utf-8" /></head><body><h1>歡迎: 張三</h1><p>最新商品: <a href="products/mobile.html">華為P40</a></p></body> </html>2. 這里的用戶名(上面的"張三"), 應該是登錄這個網頁的訪問者的名字, 并且最新產品的數據應該來自于數據庫, 這樣它才能隨時更新。那么不能直接在html頁面中輸入它們, ?不能使用靜態的html代碼。此時, 可以使用要求輸出的模板。模板和靜態html是相同的, 只是它會包含一些FreeMarker將它們變成動態內容的指令:
<!DOCTYPE html> <html><head><title>手機專賣</title><meta charset="utf-8" /></head><body><h1>歡迎: ${user}</h1><p>最新商品: <a href="${latestProduct.url}">${latestProduct.name}</a></p></body> </html>3. 模板文件存放在Web服務器上, 就像通常存放靜態html頁面那樣。當有人來訪問這個頁面, ?FreeMarker將會介入執行, 然后動態轉換模板, 用最新的數據內容替換模板中${...}的部分, ?之后將結果發送到訪問者的Web瀏覽器中。訪問者的Web瀏覽器就會接收到例如第一個html示例那樣的內容(也就是沒有FreeMarker指令的html代碼), 訪問者也不會察覺到服務器端使用的FreeMarker。 (當然, 存儲在Web服務器端的模板文件是不會被修改的; 替換也僅僅出現在Web服務器的響應中。)
4. 請注意, 模板并沒有包含程序邏輯來查找當前的訪問者是誰, 或者去查詢數據庫獲取最新的產品。顯示的數據是在FreeMarker之外準備的, 通常是一些"真正的"編程語言(比如Java) 所編寫的代碼。模板作者無需知道這些值是如何計算出的。事實上, 這些值的計算方式可以完全被修改, 而模板可以保持不變, 而且頁面的樣式也可以完全被修改而無需改動模板。當模板作者(設計師)和程序員不是同一人時, 顯示邏輯和業務邏輯相分離的做法是非常有用的, 即便模板作者和程序員是一個人, 這么來做也會幫助管理應用程序的復雜性。保證模板專注于顯示問題(視覺設計, 布局和格式化)是高效使用模板引擎的關鍵。
5. 為模板準備的數據整體被稱作為 數據模型。 模板作者要關心的是, 數據模型是樹形結構(就像硬盤上的文件夾和文件), 在視覺效果上, 數據模型可以是:
6. 上面只是一個形象化顯示; 數據模型不是文本格式, 它來自于Java對象。對于Java程序員來說, root就像一個有getUser()和getLatestProduct()方法的Java對象, 或者是有"user"和"latestProducts"鍵值的Java Map對象。相似地, latestProduct就像是有getUrl()和getName()方法的Java對象, 或者是有"url"和"name"鍵值的Java Map對象。
7. 可以從數據模型中選取這些值, 使用user和latestProduct.name表達式即可。如果我們類推, 數據模型就像一個文件系統, 那么"(root)"和latestProduct就對應著目錄(文件夾), 而user, url和name就是這些目錄中的文件。
8. 總的來說, 模板和數據模型是FreeMarker來生成輸出(比如第一個展示的HTML)所必須的: 模板 + 數據模型 = 輸出。
總結
以上是生活随笔為你收集整理的002_模板 + 数据模型 = 输出的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 001_FreeMarker介绍
- 下一篇: 003_数据模型一览