咱們在開發Web應用時常常提到的一個概念是Model 1/Model 2,那麼到底它是什麼意思呢?其實它是對採用JSP技術構成Web應用的不一樣模型的描述。下面對這個概念作一個簡單的介紹。java
Model 1web
在使用JAVA技術創建Web應用的實例中,因爲JSP技術的發展,很快這種便於掌握和可實現快速開發的技術就成了建立Web應用的主要技術。JSP頁面中能夠很是容易地結合業務邏輯(jsp:useBean)、服務端處理過程(jsp:scriplet)和HTML(<html>),在JSP頁面中同時實現顯示,業務邏輯和流程控制,從而能夠快速地完成應用開發。如今不少的Web應用就是由一組JSP頁面構成的。這種以JSP爲中心的開發模型咱們能夠稱之爲Model 1。apache
固然這種開發模式在進行快速和小規模的應用開發時,是有很是大的優點,可是從工程化的角度考慮,它也有一些不足之處:設計模式
考慮到這些問題在開發大型的Web應用時必須採用不一樣的設計模式--這就是Model2服務器
Model 2mvc
Model 2 表示的是基於MVC模式的框架。MVC是Model-View-Controller的簡寫。"Model" 表明的是應用的業務邏輯(經過JavaBean,EJB組件實現), "View" 是應用的表示面(由JSP頁面產生),"Controller" 是提供應用的處理過程控制(通常是一個Servlet),經過這種設計模型把應用邏輯,處理過程和顯示邏輯分紅不一樣的組件實現。這些組件能夠進行交互和重用。從而彌補了Model 1的不足。app
Model 2具備組件化的優勢從而更易於實現對大規模系統的開發和管理,可是開發MVC系統比簡單的JSP開發要複雜許多,它須要更多的時間學習和掌握。同時新東西的引入會帶來新的問題(這讓我想起來關於"自動計算"的一篇文章,中間提到爲了下降系統的複雜度,卻致使更高的複雜度)。框架
MVC自己就是一個很是複雜的系統,因此採用MVC實現Web應用時,最好選一個現成的MVC框架,在此之下進行開發,從而取得事半功倍的效果。如今有不少可供使用的MVC框架,因爲Struts有完整的文檔而且相對來說比較簡單,因此用它開發MVC系統仍是比較方便地。jsp
Struts是Apache組織的一個項目,像其餘的Apache組織的項目同樣,它也是開放源碼項目。Struts是一個比較好的MVC框架提供了對開發MVC系統的底層支持,它採用的主要技術是Servlet,JSP和custom tag library。獲取它的使用版本和具體信息能夠查閱 http://jakarta.apache.org網站。
Struts框架的基本構成由下圖所示:
做爲一個MVC的框架,Struts對Model、View和Controller都提供了對應的實現組件,對應上面的UML圖,分別進行介紹,而且看看它們是如何結合在一塊兒的。
Struts框架的處理流程清楚的體現了MVC系統的特色,簡單的Struts組件結構如圖2所示。Struts Controller ActionServlet處理客戶請求,利用配置的ActionMapping對象把請求映射到Action處理器對象進行處理。Action處理對象訪問ActionForm中的數據,處理和響應客戶請求,它還調用後臺的Bean組件,這些組件封裝了具體的業務邏輯。Action處理器對象根據處理結果通知Controller,Controller進行下一步的處理。
因爲Struts已經爲咱們提供了一個很是好的MVC框架,咱們利用Struts開發MVC系統時能夠大大加快開發的速度。在開發時能夠採用的一個開發流程以下(引自資料3):
具體在使用Struts框架時,對應各個部分的開發工做主要包括:
web.xml文件的配置:
web應用中的web.xml是第一個要配置的地方,它描述了系統的Controller對象。在web.xml中增長以下標記
<servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>application</param-name> ?????? </servlet> |
說明:這個servlet對象就是Struts提供的Controller,還能夠爲它指定初始化參數,好比對系統應用屬性的支持。
<servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servelt-mapping> |
說明:實現客戶請求的url信息和服務器端具體處理的映射關係。
<taglib> <taglib-url>/WEB-INF/struts-bean.tld</taglib-url> <taglib-location>/WEB-INF/struts-bean.tld</taglib-location> </taglib> ??????? |
說明:添加對Struts提供的應用所使用的自定義標記庫的引用。
struts-config.xml文件的配置:
struts-config.xml是用於創建Controller和Model之間的關係的。它描述了Controller所使用的把請求對應到具體處理的法則,同時它還描述了客戶提供的數據與ActionForm組件的對應映射關係。
在struts-config.xml中增長以下標記
<form-beans> <form-bean name="loginForm" type="loginForm" /> </form-beans> |
說明:<form-bean>標記描述一個具體的ActionForm子類對象,經過它和JSP頁面中的自定標記的結合使用能夠實現ActionForm和View之間的數據映射。
<action-mappings> <action path="/login" type="loginAction" name="loginForm" input="/login.jsp" ??? /> </action-mappings> |
說明:<action-mappings>標記描述了請求和處理的一對一映射關係。input和path屬性惟一的標記了客戶端的一個請求,name屬性描述封裝客戶端的數據的ActionForm子類對象。Type屬性描述處理這個請求的Action子類對象。
經過對兩個配置文件的配置,把Struts框架中MVC的各個部分聯繫起來,實現一個真正的MVC系統。
編寫一個好的例子演示是比較佔篇幅的,能夠從 http://jakarta.apache.org/下載Struts最新的發表包,在這個包中有詳細的用戶幫助和API文檔,還有很是好的演示程序可供參考。具體的安裝步驟能夠參考附帶的文檔。參考這些例子能夠很快地理解如何利用struts框架開發MVC系統