標籤:自身 返回 str 視圖 標籤庫 改變 支援 mvc 單擊
經典MVC中的事件流中,使用者與視圖View進行互動,填入資料並單擊按鈕,控制器Controller按接收到來自視圖的事件並對模型Model進行操作,根據使用者提供的資料更新模型Model。View也會接到“模型改變”的事件通知,因而它會隨著模型而更新,將更新的結果顯示給使用者。這種模式在單機且即時更新的應用程式中效果很好。
但是,在web世界的MVC,view是在用戶端的瀏覽器產生的,controller和model在伺服器端,他們之間的互動通過http協議完成的。view不能直接調用controller,而是基於http請求映射成不同的url。view不是一個可以被更新的對象,而是在用戶端發出一個新請求的時候隨之呈現的網頁頁面。同時,controller也不能將自身的改變通知biew,因為view呈現於另一台電腦的使用者瀏覽器中。因此,試圖每次都需要依照最新的資料重建。
web世界的經典MVC應用程式通過使用前端控制器(front controller)模式實現的。此模式包含一個分發器(通過servlet實現),而分發器將請求url映射到需要被執行的命令樣本(commond Instance,於Structs中就是Action)。
Action與系統後端的服務進行互動,通常這些服務組合在一起作為模型。命令執行個體在處理完商務邏輯之後返回一個碼值,這個返回碼會映射到某個view(通常為一個web頁面模板,如jsp)。最後,結合controller和模型view(通常會使用標籤庫,一邊訪問數值)將會呈現給使用者。
分發器直接到達view並且在繼續產生view之前調用相應的controller,這種模式稱為頁面控制器。
(▲Structs1採用前端控制器,Structs兩種模式都支援)
架構可以極大提高開發效率。
架構的強大之處不是源自他能讓你做什麼,而是他不能讓你做什麼。
架構之談(MVC>Structs>Structs2)