https://blog.csdn.net/boonya/article/details/14227149 html
Stripes視圖框架與Struts2的行爲很類似,因此在這裏作一個簡要的對比,發現它們的優缺點,以便在實際項目中合理的選擇。web
原文來自:http://www.stripesframework.org/display/stripes/Stripes+vs.+Struts2app
這裏有一些Stripes和Struts2快速進行比對的一些指標:框架
|
Stripes工具 |
Struts2oop |
參照版本佈局 |
1.5ui |
2.0.12this |
配置文件spa |
web.xml, |
web.xml, struts.xml, optionally struts.properties ... |
主要核心 |
類需實現 ActionBean接口 |
類中需有execute()方法,選擇實現Action類或繼承ActionSupport類 |
響應機制 |
Resolution的實例 |
一個在struts.xml 或在註解中對應的一個String標識 |
視圖技術 |
JSP,FreeMarker |
JSP,,FreeMarker,,Velocity |
佈局機制 |
內置三種佈局標籤,它們能夠被那些喜歡分層和表格的人很好的使用 |
提供分層和表格 |
綁定機制 |
內置 |
OGNL |
輸入驗證 |
使用@Validate 和@ValidateNestedProperties實現 |
須要XML配置文件或註解來實現 |
快速驗證 |
內置可配置的ValidationState.ALWAYS 和Validation.InvokeValidateWhenErrorsExist |
在 <field-validator>標籤上設置屬性: short-circuit="true" |
自定義驗證 |
用 @ValidationMethod註解方法 |
擴展要麼ValidatorSupport或FieldValidatorSupport,需配置validators.xml |
模型視圖傳輸 |
使用${actionBean} 獲取屬性 |
使用值棧(ValueStack) |
類型轉換 |
實現TypeConverter<T>(泛型) |
實現OGNL,類型轉換一般是擴展StrutsTypeConverter(非泛型) |
格式化 |
實現 Formatter<T> (泛型) |
實現OGNL,類型轉換一般是擴展StrutsTypeConverter(非泛型) |
自定義模塊配置 |
自動加載Extension.Packages初始化參數 |
在struts.xml中配置 |
攔截器 |
實現Interceptor接口或者在方法前加@Before/@After註釋 |
實現Interceptor接口,並在struts.xml中配置 |
本地化 |
爲錯誤、命名和JSTL提供資源包 |
提供資源包查詢機制 |
注:從上面的配置中能夠看出,Stripes減小了不少配置工做,而且內置了驗證註解而再也不去編寫新的Java 類來實現驗證功能。
行爲(Actions)
Stripes的Action定義由類實現ActionBean的接口,並自動加載包或子包的ActionResolver.Packages初始化參數中列出的包之一。
Struts2的Action能夠是普通的公共字符串的execute()方法,或者實現了Action接口的類的類。他們必須在struts.xml聲明,或者複製來自Stripes的自動加載機制。
事件處理程序(Event handlers)
在Stripes中,用public Resolution methodName() {}來定義一個事件處理程序。它使用「name=」來表示一個submit的提交,"event="來表示事件的觸發指向(target)的事件方法的調用。在一個表單中能夠擁有多個event handler事件處理方法和多個submit的按鈕,一個簡單的mapper(接口)能夠對應多個事件處理程序,而且能夠將之放入submit標籤對應值的按鈕。
Struts2是面向一個單一的事件處理程序方法:execute()。你能夠有其餘的事件處理方法,具備任意名稱的,但您必須在struts.xml中包含URL映射到一個方法的名稱的配置策略。Struts2使人驚訝的是它很困難去實現有一個以上的提交按鈕的形式。雖然它支持多個submit按鈕,但並不像Stripes那麼簡單明瞭。
決議與結果(Resolutions and results)
Stripes 的事件處理程序返回的是一個實現了Resolution的實例。Stripes 內置實現轉發或重定向,數據流,返回JavaScript對象,或者是HTTP請求的錯誤碼。它很簡單的就實現了自定義要求的Resolution 接口(只須要一個方法)。
Struts2's execute() 方法返回一個必須被映射到具體東西的String,不管是在的struts.xml中或與註釋的符號結果。能夠說,返回一個象徵性的結果,沒必要去別的地方鏈接字符串的結果避免給開發人員帶來沒必要要的負擔。
自定義類型轉換(Custom Type Converters)
Stripes中實現自定義轉換器須要實現TypeConverter<T> (T是目標對象)。而後,您能夠將T對象的每一個屬性放入自定義類型轉換器中,並將該類型轉換器放入擴展包(Extension.Packages package)裏。或者,您也可使用@Validate(converter=YourTypeConverter.class).來註解你須要特殊轉化處理的屬性字段。
Struts2的,你寫一個自定義類型轉換器經過實施ognl.TypeConverter接口,一般由擴展StrutsTypeConverter類。Stripes相反,Struts2的接口沒有泛型化,因此你的方法將返回一個Object。使用類型轉換器類型T的每一個屬性,添加一行xwork的conversion.properties的屬性徹底合格的名稱和值類型轉換器類的徹底限定名稱的屬性表示T。對於一個特定的屬性,你添加的屬性的名稱和類型轉換器類的徹底限定名稱ActionName conversion.properties ActionName是類名的動做,該文件是在同一個目錄層次結構包動做類。
視圖技術(View Technology)
Stripes框架支持任何支持JSP標籤庫的視圖技術。這意味着你可使用JSP和Freemarker的,而且能夠實現爲一個servlet的映射。從J2EE,JSP,FreeMarker有詳細FreeMarker的Stripes配置。使用Velocity與Stripes是可能使用工具項目VelocityView,但你缺乏標籤庫(taglib)的支持。Velocity1.5不支持JSP標記庫 - 這是一個自2006年以來2.0願望清單功能的特性(feature)。
Struts2的,JSP的支持,就像Stripes。但Struts2的也有插件來處理Freemarker和Velocity,從而使這兩個視圖技術的功能變得可能。話雖這麼說,使用Freemarker的(或者JSP)是比Velocity更天然一些。例如,對於此標記:
攔截器(Interceptors)
Stripes攔截器類實現的是Interceptor接口,並指定它與@Intercepts註解的生命週期階段(次)被截獲。Stripes會自動加載類經過Extension.Packages機制。您也能夠在web.xml中配置的攔截器,攔截器執行的順序是重要的。
Struts2的攔截器也是實現Interceptor接口。而後,您必須在struts.xml定義攔截器類,定義一個新的攔截器棧,使用默認的堆棧,並增長你的攔截器。最後,你必須配置Action將使用這個新的攔截器棧。