这几天研究了一下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里面传进传去,方便平台之间的移植,而且很显然,单元测试更加方便了。Struts中实现的Action必须继承Struts的Action类,而Webwork只需要实现Action接口。Struts中只实例化一个Action实例处理所有的请求,需要考虑thread safe问题,而Webwork对每个请求实例化一个Action进行处理,不必担心线程安全的问题。

3、Webwork将Filter的使用发挥到了极致。我们开发Struts应用是也经常使用一些Filter,比如进行字符转换或者权限管理等,通过路径配置使其请求都经过Filter的处理。而Webwork将Filter的地位提升到了和Action一样的地位,基于每一个Action都可以采用默认的Filter或者自定义配置Filter或Filter Stack,通过Filter完成部分框架的功能。

4、丰富的View层。相对于Struts1.3只使用JSP相比,Webwork的灵活性大得多,通过result-type的配置,Webwork的展现层可以使用FreeMarker,Velocity,XSLT等。

上面的这些设计思想非常值得借鉴。