一、MVC簡介
MVC(Model-View-Controller)模型-視圖-控制器,最早由Trygve Reenskaug在1978年提出,是施樂帕羅奧多研究中心(Xerox PARC)在20世紀80年代為程序語言Smalltalk發明的一種軟件架構。MVC模式的目的是實現一種動態的程序設計,使后續對程序的修改和擴展簡化,並且使程序某一部分的重復利用成為可能。除此之外,此模式通過對復雜度的簡化,使程序結構更加直觀。軟件系統通過對自身基本部分分離的同時也賦予了各個基本部分應有的功能。
- Model: 用於封裝與應用程序的業務邏輯相關的數據以及對數據的處理方法。模型有對數據直接訪問的權力,例如對數據庫的訪問。模型不依賴視圖和控制器,也就是說, M模型不關心它會被如何顯示或是如何被操作。但是模型中數據的變化一般會通過一種刷新機制被公布。為了實現這種機制,那些用於監視此模型的視圖必須事先在此模型上注冊,從而,視圖可以了解在數據模型上發生的改變。
- View:能夠實現數據有目的的顯示。在視圖中一般沒有程序上的邏輯。為了實現視圖上的刷新功能,視圖需要訪問它監視的數據模型,因此應該事先在被它監視的數據那里注冊。
- Controller:起到不同層面間的組織作用,用於控制應用程序的流程。它處理事件並作出響應。“事件”包括用戶的行為和數據模型上的改變
在Smalltalk-80中的應用程序編程中:如何使用模型 - 視圖 - 控制器(MVC) [Burbeck92],史蒂夫·伯貝克( Steve Burbeck)描述了MVC的兩個變體:一個被動模型和一個主動模型。
- 被動模型:當一個控制器專門操縱模型時,采用被動模型。控制器修改模型,然后通知視圖模型已更改並應更新。這種情況下的模型完全獨立於視圖和控制器,這意味着模型無法報告其狀態的變化。HTTP協議就是這個例子。在瀏覽器中沒有簡單的方法從服務器獲取異步更新。瀏覽器顯示視圖並響應用戶輸入,但不檢測服務器上數據的更改。只有當用戶顯式請求刷新時,服務器被詢問才能進行更改。

- 主動模型:當模型在沒有控制器參與的情況下改變狀態時,使用主動模型。當其他來源更改數據並且更改必須反映在視圖中時,可能會發生這種情況。考慮股票代碼顯示。您可以從外部來源收到股票數據,並希望在股票數據發生變化時更新視圖(例如,股票行情和警報窗口)。因為只有模型檢測到它們發生時內部狀態的變化,所以模型必須通知視圖來刷新顯示。

二、Java web 應用程序的常用組件
1.Serverlet
Servlet運行於Web容器中,如Tomcat,它可以被Web容器動態加載,接收瀏覽器請求,調用其他組件處理請求,然后把處理結果返回。當瀏覽器訪問某個Servlet時, Web容器將會創建一個ServletRequest對象和ServletResponse對象,並且把用戶的請求信息封裝在ServletRequest對象中。然后把這兩個對象作為參數傳輸給Servlet的 特定方法中。在該方法中處理請求,把處理結果封裝在ServletResponse對象中,返回給Web容器。最后Web容器把結果返回到瀏覽器去解析、顯示。
2.Jsp
JSP是一種動態網頁技術。它把HTML頁面中加入Java腳本,以及JSP標簽構成JSP文件。當瀏覽器請求某個JSP頁面時,Tomcat會把JSP頁面翻譯為Java文件。然后將它 編譯為class文件,接着執行它,把生成的HTML頁面返回到客戶端顯示。
3.JavaBean
JavaBeans是Java中一種特殊的類,可以將多個對象封裝到一個對象(bean)中。 特點是可序列化,提供無參構造器,提供getter方法和setter方法訪問對象的屬性。
4.EJB
企業級JavaBean(Enterprise JavaBean, EJB)是一個用來構築企業級應用的服務器端可被管理組件。Java企業版API(Java Enterprise Edition)中提供了對EJB的 規范。EJB是一個封裝有某個應用程序之業務邏輯服務器端組件。
5.Web服務器和應用服務器
Web服務器用來處理HTTP請求,並返回HTTP數據。它主要用來和瀏覽器進行交互,給用戶提供服務。應用服務器可以被Web服務器調用,進行業務邏輯的處理。它返回 的數據被Web服務器組織為HTML格式,然后返回到瀏覽器去解析。
三、java web 的解決方案(開發方法)
1.JSP+JavaBean:該模式將業務邏輯與頁面表現進行分離,在一定程度上增加了程序的可調試性和維護性。簡單,適合小型項目的快速構建與運行。
2.JSP+javaBean+Serverlet:JSP作為視圖,來表現頁面;Servlet作為控制器,控制程序的流程並調用業務進行處理;JavaBean封裝了業務邏輯。遵循了MVC設計模式。
3.JSP+Struts:成熟的MVC開發框架。
4.Spring:建立在核心模塊之上,嫩夠適應於多種多視圖、模板技術、國際化和驗證服務,實現控制邏輯和業務邏輯清晰的分離。
5.JSP+Struts+Hibernate:利用Struts的MVC設計模式,與Hibernate持久化對象組成的開發方案。
6.JSP+Struts+Spring+Hibernate:Struts負責表示層,Spring負責邏輯層的業務, Hibernate持久層中數據庫的操作,組成的開發方案。
四、常用的java web的MVC框架
1.Struts2:Struts 是Apache軟件基金會(ASF)贊助的一個開源項目。它最初是Jakarta項目中的一個子項目,並在2004年3月成為ASF的頂級項目。它通過采用JavaServlet/JSP技術,實現了基於Java EEWeb應用的MVC設計模式的應用框架,是MVC經典設計模式中的一個經典產品.
2.Spring MVC:Spring MVC屬於SpringFrameWork的后續產品,已經融合在Spring Web Flow里面。Spring 框架提供了構建 Web 應用程序的全功能 MVC 模塊。使用 Spring 可插入的 MVC 架構,從而在使用Spring進行WEB開發時,可以選擇使用Spring的SpringMVC框架或集成其他MVC開發框架,如Struts1,Struts2等.
3.Grails:Grails是一套用於快速Web應用開發的開源框架,它基於Groovy編程語言,並構建於Spring、Hibernate等開源框架之上,是一個高生產力一站式框架。
4.JSF:JavaServer Faces (JSF) 是一種用於構建Java Web 應用程序的標准框架(是Java Community Process 規定的JSR-127標准)。它提供了一種以組件為中心的用戶界面(UI)構建方法,從而簡化了Java服務器端應用程序的開發。由於由Java Community Process (JCP) 推動,屬於Java EE 5中的技術規范,而受到了廠商的廣泛支持。
5.Tapestry:Tapestry並不是一種單純的MVC框架,它更像MVC框架和模板技術的結合,它不僅包含了前端的MVC框架,還包含了一種視圖層的模板技術,使用Tapestry完全可以與Servlet/JSP API分離,是一種非常優秀的設計。 通過使用Tapestry,開發者完全不需要使用JSP技術,用戶只需要使用Tapestry提供的模板技術即可,Tapestry實現了視圖邏輯和業務邏輯的徹底分離。
