做爲一名java工程獅,你們確定經歷過不少面試,但每次幾乎都會被問到什麼是MVC設計模式,你是怎麼理解MVC的相似這樣的一系列關於MVC的問題。前端
【出現頻率】java
【關鍵考點】面試
【考題分析】 編程
在java Web開發中,存在兩種廣泛的開發模式,一般成爲模式1和模式2。模式1使用JSP+JavaBean技術將頁面顯示和業務邏輯分開,由JSP來實現頁面的顯示,JavaBean對象來保存數據和實現業務邏輯。客戶端直接向JSP發出請求,JSP作出相應的響應,並調用JavaBean對象,全部的數據經過JavaBean來處理,而後再返回JSP,由JSP生成最後的返回結果,模型1的結構圖以下所示:設計模式
在模型一中,JSP每每會嵌入控制請求流程的代碼和部分邏輯代碼,若是把這部分代碼提取出來,由一個單獨的角色來承擔,該角色也就是控制器,則此時就構成了 模型2,模型2就符合了MVC的設計模式,即模型--視圖--控制器(Model--View--Controller)。session
MVC的架構的Web程序被分割成若干邏輯部件,使得程序開發編程變的更加容易。它把對象按照功能的不一樣分割成3個部分,主要目的就是爲了將各類對象的耦合度降到最低。被分割成的3個部分爲:模型(Model),視圖(View),控制器(Controller)。架構
下面簡單介紹一下最基礎的開發模式(JSP-Servlet)來構建一個MVC架構模式,後來的那些框架都是在此基礎上增長的,代替相應的組件實現MVC的設計模式的。app
(JSP-Servlet)開發中,由Servlet來充當控制器的角色,它接受請求,根據請求信息的不一樣將它們分發給合適的JSP頁面來做爲用戶的響應,同時,Servlet還須要實例化一個JavaBean對象,JSP就能夠經過使用JavaBean的相關標籤(如<jsp:getProterty>)來的到JavaBean的數據,結構以下圖所示:框架
採用模型2,能夠將頁面的顯示,業務邏輯的處理和流程的控制很清晰的分離出來。JSP負責數據的顯示,JavaBean負責業務邏輯的處理,Servlet負責流程的控制。MVC模式使得Web應用程序很容易擴展和維護,由於各個部件的功能不一樣,能夠由不一樣的人進行開發和維護。例如,前端攻城獅專門負責JSP頁面,充分發揮她們的美術和設計才能,後臺攻城獅負責業務邏輯的實現。jsp
Struts1框架是如何體現MVC模式的
雖然struts1如今基本因爲使用不方便基本已被struts2所替代,但許多老的項目仍是用struts1寫的,因此有必要對struts1的框架了解一下,畢竟它曾經也馳騁疆場數載呢,如今依然在某些項目中還能看到它的身影。
struts1的控制器(Controller)由ActionServlet、Action和struts-config.xml組成。ActionServlet是struts的入口,全部的請求都會經過它來處理,而後由它來決定相應的Action來處理請求。Action表明了一次動做,如用戶註冊、購買商品等,開發者的業務邏輯代碼也會在這裏添加。配置文件struts-config.xml是對整個struts的配置,包括ActionServlet應該將請求轉發給那個Avtion,Action負責處理完成以後,又該由那個JSP文件做爲響應等。
struts1的模型(Model)主要由ActionForm來實現,它有一點相似於JavaBean,包含了若干可讀可寫的屬性,用於保存數據,也有數據驗證的功能。通常來講,一個Action會配備一個ActionForm。
struts1的視圖(View)主要由JSP來實現。JSP顯示的數據能夠來自ActionForm,也能夠是Action保存在做用範圍(request,session,application)的數據。固然,使用struts自帶的標籤能夠起到最大的簡化做用。
使用struts1開發Web應用程序之後,開發者的思考方式須要作一下改變,Action、ActionForm和JSP是一個總體了,每個HTTP請求都須要它們三者協做來完成。JSP表明用戶能夠看到的東西,ActionForm表明的是數據,Action表明的是業務邏輯。下圖所示的是struts1的MVC各個組成部分,以及它們是如何一塊兒協調工做的。
以上就是struts1最核心的設計思想,開發人員大多數的時候只須要完成文件配置和Action,將大多數精力集中在Action中的業務邏輯實現上面。若是業務上有改動,只須要修改action便可,若是顯示上有變化,也只須要修改JSP,二者實現了耦合,互不影響。下面這個圖大概講解一下Struts處理請求的過程和原理。