最近項目要用到spring mvc 架構,看了一些資料,現整理備以後遺忘。
1、spring MVC架構採用了command+controller的模式,整體架構如所示:
核心的控制器是DispatcherServlet,返回的視圖對象是ModeAndVIew對象。
2、在非Annotation base controller情況下,controller類是AbstractControllor子類;有表單時,可繼承SimpleFormController類,onSubmit方法是表單提後預設執行的方法。
3、spring mvc的校正要建立一個校正的類,該類要實現Validator介面,且重寫validate方法,一般在該項方法內部調用ValidationUtils工具類來校正;JSP頁面內就有錯誤的form:error標籤,且path屬性指出是哪個域要執行校正;bean的設定檔中validate-ref屬性指出校正類bean的ID。
4、spring mvc的攔截器也要建立一個實現了HandlerIntercepterAdapter的類,該類要重寫preHandle,postHandle和afterCompletion 三個方法,意思你懂得。在bean的設定檔中,需要作用到這些攔截器的bean配置 中加屬性intercepters-ref指出攔截器bean的ID即可。
5、spring mvc 的controller繼承MulitActionController即可在一個controller根據不同的方法名處理多個Action請求,只需在bean設定檔中指明即可。
6、spring mvc架構支援annotation base controller,常用的annotation有@Controller,@RequestMapping,@SessionAttribute
現在各主流java web架構優缺點總結如下
然後,Matt按照這些評價標準,對各個架構做了以下闡述:
Ajax支援
◆JSF:沒有內建的Ajax支援,需要使用ICEfaces和Ajax4JSF
◆Stripes:沒有對應的類庫,支援流輸出
◆Struts 2:內建Dojo,有用於GWT和JSON的外掛程式
◆Spring MVC:沒有對應的類庫,需要使用DWR和Spring MVC擴充
◆Tapestry:Tapestry 4.1中,有內建的Dojo
◆Wicket:有Dojo和Script.aculo.us支援
書籤能力
◆JSF:可以任意提交——URL甚至不被考慮
◆Stripes:使用約定,但是你可以不加理會
◆Struts 2:有命名空間的概念,這使得收藏某個頁面並返回變得容易
◆Spring MVC:允許完全的URL控制
◆Tapestry:依然存在一些醜陋的URL
◆Wicket:允許裝配(mount)頁面/URL
驗證
◆JSF:預設的國際化資訊醜陋,但是配置簡單
◆Stripes和Wicket:用Java類進行驗證——不支援用戶端驗證
◆Struts 2:使用OGNL完成強大的運算式驗證功能;只有在Action上指定了規則,才支援用戶端驗證。
◆Spring MVC:允許你使用公用驗證器——這是一種成熟的解決方案
◆Tapestry:有健壯的驗證功能——不需自訂就有漂亮的國際化資訊
可測試性
◆Spring MVC和Struts 2:允許利用mocks(例如EasyMock、jMock和Spring Mocks)簡單地進行測試
◆Tapestry:測試困難,因為頁面類被抽象、具體類被簡化
◆JSF:頁面類可以方便地被測試,實際上很像Struts 2 中的actions
◆Wicket:有WicketTester——一個強大的解決方案
◆Stripes:有Servlet API Mocks和MockRoundtrip
提交和重新導向
解決重複提交問題的最簡單方法是:在提交後重新導向
◆Spring MVC:允許你將參數加到重新導向URL上
◆Stripes、Tapestry和Wicket:有“flash式”的支援
◆Struts 2:需要一個自訂的解決方案
◆JSF:需要一個自訂的解決方案,國際化資訊很難加入到頁面bean中
國際化
◆JSTL的標籤使國際化變得簡單;如何將國際化資訊放到控制器類中,還沒有一個統一的標準。
◆Stripes、Spring MVC和JSF:每個地區使用一個資源繫結檔案
◆Struts 2、Tapestry和Wicket:提倡把每個頁面/action用到的資源檔分開
◆JSF:需要在每個頁面上定義資源綁定資訊
◆Tapestry:標籤比較可怕
頁面修飾
◆Tiles能夠用於Struts 2、Spring MVC和JSF中;需要對每個頁面進行配置。
◆SiteMesh能夠用於所有的這些架構中(不推薦在JSF、Tapestry或者Wicket中使用);在設定完成後, 只需要很少的維護。
開發工具
◆Spring MVC:Spring IDE,但是只做XML校正,不是一個UI/web工具
◆Struts 2:Eclipse
◆Tapestry:Spindle,對編碼者非常有利
◆JSF:眾多IDE支援,並且做得越來越好
◆Stripes和Wicket:沒有任何官方工具
◆NetBeans目前支援Struts *、JSF(+Facelets)、Tapestry和Wicket,尚不支援Stripes和Spring MVC
市場需求
◆Struts 1:需求依然很大並且被廣泛使用
◆Spring MVC:越來越受關注,但大部分是因為Spring架構的一些其他特徵
◆JSF:很快地變得流行起來
◆Struts 2:正在獲得地盤,但是相關的工作機會很少
◆Tapestry:在過去的數年裡,受歡迎程度不斷增加
◆Wicket和Stripes:還是未知數