JSP的主要工作就是把頁面模板與數據給裝配起來,變成HTML發送給瀏覽器
## 黑暗歲月
在Web編程才誕生的時候,大家只能使用Perl和C語言等以CGI的方式來輸出HTML
所謂裝配其實就是字符串拼接。
## 服務器端動態頁面
1996年的微軟退出了ASP(Active Server Page),它可以支持在HTML里面嵌入代碼。
可以先用可視化編輯器(Dreamweaver)把界面創建好,然后再塞入代碼。

頁面看上去就是一個HTML靜態文本,被"<%%>"包裹的就是代碼了,裝配工需要運行他們,把產生的數據嵌入到HTML中
SUN公司推出了JSP(Java Server Pages)
JSP本質上就是一個模板,代碼與HTML混雜在一起,沒有美感。
## 標簽庫
后來推出了MVC設計模式,可以把展示和邏輯分開,JSP自然就是視圖
但是界面上顯示的邏輯還是必不可少,像分支、循環的控制語句不可或缺,所以可以做一層封裝,也就是JSTL(JSP Standard Tag Library)

<c: if> , <c:forEach> 就是標簽了,本質上都是JAVA類,可以接收到傳遞過來的參數,進行計算,輸出HTML
## 模板引擎
依然有人為了省事往JSP中寫入大量的代碼。
有一天,Java 世界來了兩個新家伙,一個叫 Freemaker, 一個叫 Velocity,
* 這兩個新裝配工與JSP差不多,但是語法受限制,JSP可以嵌入任何JAVA語句,而Freemaker,Velocity只是為了頁面展示用的,想在里面編寫復雜的業務邏輯是根本不可能的。

* 可以脫離Web 環境來使用,不像JSP必須有Tomcat等Web 容器的支持。
* 還可以做動態頁面的靜態化,例如說有些頁面就是把數據庫的數據展示出來, 而數據變化頻率很低, 那他倆就可以事先讀取數據庫, 把頁面的數據生成了,緩存在那里, 等到用戶使用時可以直接返回。
## JavaScript
后來JSP頁面裝配起來更簡單了, 引用的JS文件和css增多了。
因為很多與界面相關的東西都挪到了JavaScript和CSS去了。
JavaScript可以從瀏覽器端發出異步的HTTP調用,基于此發展了很多的JQuery的框架,可以靈活的在瀏覽器中操作界面。
后面服務器端的View越來越少,很多從瀏覽器發過來的HTTP個會到JSP中進行模板和數據的裝配,也不會有HTML的返回。
這些HTTP請求調用的都是JAVA接口,這些Java 代碼直接把JSON數據返回給瀏覽器了。
最新式的頁面模板竟然是一個靜態的HTML文件

這個模板擴展了HTML屬性,這 ng-controller="StuController" 是一個js函數,也是MVC中控制器
這個 javascript 函數, 它通過 http 調用了服務器端的接口 "/students" , 然后把返回的數據直接放到了 students 里邊。

JavaScript在瀏覽器里面實現了MVC。StuController函數是控制器,students是模型(通過HTTP調用從服務器端獲得),視圖模板就是靜態的HTML,然后在瀏覽器中把模板和數據裝配起來,形成了HTML
現在前后端分離了,后端只負責提供接口以及頁面模板,由JavaScript在瀏覽器直接讀到頁面模板和JSON以后,在瀏覽器中進行裝配。