MVC模式在Java Web應用程式中的實現
一、前言
MVC 作為一種框架模式已經有很久的歷史了,這麼多年來經受住了工程實踐的考驗,獲得了巨大的成功,今天我們來重新回顧一下MVC 框架模式,並以 java web 應用程式為例來具體說明一下 MVC 的實現過程。
二、MVC簡介
MVC原本存在於桌面程式中的,M是指資料模型,V是指使用者介面,C則是控制器。使用MVC的目的是將M和V的實現程式碼分離,從而使同一個程式可以使用不同的表現形式。比如一批統計資料你可以用柱狀圖來表示,也可以用扇形圖來表示。C存在的目的則是確保M和V的同步,一旦M改變,V應該同步更新。MVC是一個框架設計模式,它強制性的使應用程式的輸入、處理和輸出分開。使用MVC應用程式被分成三個核心部件:模型、檢視、控制器。它們各自處理自己的任務。下面我們來具體對這三個核心部件進行具體的說明。
檢視是使用者看到並與之互動的介面。對老式的Web應用程式來說,檢視就是由HTML元素組成的介面,在新式的Web應用程式中,HTML依舊在檢視中扮演著重要的角色,但一些新的技術已層出不窮,比如xml和JSP等。MVC一個大的好處是它能為你的應用程式處理很多不同的檢視。在檢視中其實沒有真正的處理髮生,不管這些資料是聯機儲存的還是一個僱員列表,作為檢視來講,它只是作為一種輸出資料並允許使用者操縱的方式。
模型表示企業資料和業務規則。在MVC的三個部件中,模型擁有最多的處理任務。被模型返回的資料是中立的,就是說模型與資料格式無關,這樣一個模型能為多個檢視提供資料。由於應用於模型的程式碼只需寫一次就可以被多個檢視重用,所以減少了程式碼的重複性。
控制器接受使用者的輸入並呼叫模型和檢視去完成使用者的需求。所以當單擊Web頁面中的超連結和傳送HTML表單時,控制器本身不輸出任何東西和做任何處理。它只是接收請求並決定呼叫哪個模型構件去處理請求,然後用確定用哪個檢視來顯示模型處理返回的資料。
由此我們可以看MVC的處理過程,首先控制器接收使用者的請求,並決定應該呼叫哪個模型來進行處理,然後模型用業務邏輯來處理使用者的請求並返回資料,最後控制器用相應的檢視格式化模型返回的資料,並通過表示層呈現給使用者。
三、Java Web應用程式的主要元件
1.Servlet元件
Servlet執行於Web容器當中,比如Tomcat,它可以被Web容器動態載入,接收瀏覽器請求,呼叫其他元件處理請求,然後把處理結果返回。
當瀏覽器訪問某個Servlet時,Web容器將會建立一個Servlet Request物件和Servlet Response物件,並且把使用者的請求資訊封裝在Servlet Request物件中。然後把這兩個物件作為引數傳輸給Servlet的特定方法中。在該方法中處理請求,把處理結果封裝在Servlet Response物件中,返回給Web容器。最後Web容器把結果返回到瀏覽器去解析、顯示。
2.JSP元件
JSP是一種動態網頁技術。它把HTML頁面中加入Java指令碼,以及JSP標籤構成了JSP檔案。當瀏覽器請求某個JSP頁面時,Tomcat會把JSP頁面翻譯為Java檔案。然後將它編譯為class檔案,接著執行它,並且把生成的HTML頁面返回到客戶端顯示。
3.JavaBean元件
JavaBean元件是一種符合特定規範的Java物件。在JavaBean元件中定義一系列的屬性,並且每個屬性都提供setter和getter方法,這樣就可以使用該元件儲存一些中間資料。例如Servlet Request的請求資訊、從資料庫中查詢出來的資訊等。
4.EJB元件
Enterprise Java Bean(EJB)元件是伺服器端的Java元件。該元件基於標準分散式物件技術、CORBA和RMI等技術,用於實現企業級應用的業務邏輯。設計目標與核心應用是部署分散式應用程式。簡單來說就是把已經編寫好的程式(即:類)打包放在伺服器上執行。
5.XML語言
XML(Extensible Markup Language)是一種用來建立自定義標記的標記語言。
6.Web伺服器和應用伺服器
Web伺服器用來處理HTTP請求,並返回HTTP資料。它主要用來和瀏覽器進行互動,給使用者提供服務。應用伺服器可以被Web伺服器呼叫,進行業務邏輯的處理。它返回的資料被Web伺服器組織為HTML格式,然後返回到瀏覽器去解析。
四、Java Web解決方案(開發方法)
1.JSP+JAVABEAN開發模式:
該模式將業務邏輯與頁面表現進行分離,在一定程度上增加了程式的可除錯性和維護性。但是頁面將控制與顯示集於一身。雖然簡單,但是知識適合小型專案的快速構建與執行。
2.JSP+Servlet+JavaBean開發模式:
JSP作為檢視,來表現頁面;Servlet作為控制器,控制程式的流程並呼叫業務進行處理;JavaBean封裝了業務邏輯。遵循了MVC設計模式。實現了MVC ,但是沒有統一的開發框架導致開發週期長。
3.Struts+Spring+Hibernate
Struts負責表示層, Spring負責邏輯層的業務,Hibernate持久層中資料庫的操作,是一套成熟穩定的開發方案。
五、常用的Java Web的MVC框架
Struts1.X
是一個較為早期的MVC框架實現,它的歷史最早可以追溯到2000年,作為Apache開源組織的一個重要專案,取名為“Struts”,有“基礎構建”的含義。在那個程式框架尚處於朦朧階段的年代,“基礎構建”無疑是每個程式設計師夢寐以求的東西。
Webwork2 / Struts2
Struts專案將與Webwork2專案合併,並聯合推出Struts2 .Webwork2和Struts2是一脈相承的Web層解決方案。優勢突出表現為對Controller的徹底改造以及請求對映的配置。
Spring MVC
相比較Webwork2 / Struts2,Spring MVC走了一條比較溫和的改良路線。因為Spring MVC 自始至終都沒有突破傳統Servlet程式設計模型的限制,而是在這過程中不斷改良,不斷重構,反而在發展中開拓了一條嶄新的道路。 它有兩個特點,是使用引數-返回值實現模式來打造Controller 以及引入Annotation來完成請求-響應的對映關係