这段时间学习了一下webwork2,觉得此框架设计的满轻量的,它是在Xwork这个命令框架的基础上进行了web的MVC的封装。其中可以看到很多j2ee的模式:比如前端控制器,过滤器(在webwork中是拦截器interceptor),context对象等。下面具体来总结一下:
首先来看看web.xml文件,此文件里配置了web应用程序一些必要的配置。其中最重要的就是将所有的action都映射到ServletDispatcher这个类,此类其实就是一个前端控制器,当它接受到一个请求后,它会遍历HttpServletRequest,HttpSession,ServletContext里的数据,并把它们复制到webwork专用的map中,从此所有的操作都是基于这些webwork专门的map的,从而与servlet api进行了解耦,有利与测试,方便维护。其实仔细想象,webwork的工作其实就是将一些web有关的数据结构进行重组,从而使得xwork能够识别它们,并接手处理,所以webwork就是一个数据转换器。
其次来看看xwork.xml,顾名思义,此文件是用来配置xwork框架的,它里面针对每个action可以映射它需要的interceptor,执行结果的映射等重要信息。下面来看看xwok具体是怎么执行action的,首先xwork需要创建action的代理:ActionProxy,而此代理是通过ActionProxyFactory的缺省实现类DefaultActionProxyFacory创建的,好了,现在创建好了action的代理了,下面怎么作呢?其实ActionProxy把调度任务交给了ActionInvocation,此类有个默认实现类DefaultActionInvocation,正是此类实现了Action的调度。其实ActionInvocation起的作用就和过滤器模式中过滤器链的作用一样,它负责Action对应的拦截器的调度,使得拦截起之间不需要彼此之间耦合,所有的拦截器都只和ActionInvocation打交道(调用AcionInvocation的invoke()方法)。
首先来看看web.xml文件,此文件里配置了web应用程序一些必要的配置。其中最重要的就是将所有的action都映射到ServletDispatcher这个类,此类其实就是一个前端控制器,当它接受到一个请求后,它会遍历HttpServletRequest,HttpSession,ServletContext里的数据,并把它们复制到webwork专用的map中,从此所有的操作都是基于这些webwork专门的map的,从而与servlet api进行了解耦,有利与测试,方便维护。其实仔细想象,webwork的工作其实就是将一些web有关的数据结构进行重组,从而使得xwork能够识别它们,并接手处理,所以webwork就是一个数据转换器。
其次来看看xwork.xml,顾名思义,此文件是用来配置xwork框架的,它里面针对每个action可以映射它需要的interceptor,执行结果的映射等重要信息。下面来看看xwok具体是怎么执行action的,首先xwork需要创建action的代理:ActionProxy,而此代理是通过ActionProxyFactory的缺省实现类DefaultActionProxyFacory创建的,好了,现在创建好了action的代理了,下面怎么作呢?其实ActionProxy把调度任务交给了ActionInvocation,此类有个默认实现类DefaultActionInvocation,正是此类实现了Action的调度。其实ActionInvocation起的作用就和过滤器模式中过滤器链的作用一样,它负责Action对应的拦截器的调度,使得拦截起之间不需要彼此之间耦合,所有的拦截器都只和ActionInvocation打交道(调用AcionInvocation的invoke()方法)。