這幾天研究了一下Webwork的源代碼,具體的代碼就不貼了,基本就是研究ServletDispatcher及其相關類。相對于Struts1.3(見前面的源代碼研究)。Webwork有幾點做得非常不錯,具體如下:

1、Struts采用DTO模式,需要配置大量的form,這個非常的不方便,而Webwork的Action驅動模式Model-Driven或者Property-Driven就顯得非常的方便,減少了配置,理解起來也更加簡單。

2、Action的不同。Struts中Action是直接獲取request和response對象,將Servlet API和Action緊密的耦合在一起,然而Webwork將servlet里面的東西通過map封裝起來,放在map里面?zhèn)鬟M傳去,方便平臺之間的移植,而且很顯然,單元測試更加方便了。Struts中實現(xiàn)的Action必須繼承Struts的Action類,而Webwork只需要實現(xiàn)Action接口。Struts中只實例化一個Action實例處理所有的請求,需要考慮thread safe問題,而Webwork對每個請求實例化一個Action進行處理,不必擔心線程安全的問題。

3、Webwork將Filter的使用發(fā)揮到了極致。我們開發(fā)Struts應用是也經常使用一些Filter,比如進行字符轉換或者權限管理等,通過路徑配置使其請求都經過Filter的處理。而Webwork將Filter的地位提升到了和Action一樣的地位,基于每一個Action都可以采用默認的Filter或者自定義配置Filter或Filter Stack,通過Filter完成部分框架的功能。

4、豐富的View層。相對于Struts1.3只使用JSP相比,Webwork的靈活性大得多,通過result-type的配置,Webwork的展現(xiàn)層可以使用FreeMarker,Velocity,XSLT等。

上面的這些設計思想非常值得借鑒。