简要说明
模板 + 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