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

1、Struts采用DTO模式,需要配置大量的form,這個(gè)非常的不方便,而Webwork的Action驅(qū)動(dòng)模式Model-Driven或者Property-Driven就顯得非常的方便,減少了配置,理解起來(lái)也更加簡(jiǎn)單。

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

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

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

上面的這些設(shè)計(jì)思想非常值得借鑒。