浅谈MVC框架

                                                            谈谈MVC框架
1. struts 1.x
struts 1是世界是第一个发布的MVC开源框架,受到开发人员的追捧, 在2001年由apache公司开发,随着技术的不断发展,struts 1 的缺陷也不断出现: 
    * struts 1 与servlet API 紧密的耦合
    * 进行单元测试很不方便,需通过Web来进行测试, 三方扩展 struts的TestCase
    * 对视图的支持太单一,由于出现比较早,它只支持JSP做为显示

2. JSF
 JSF是一个标准, 而不是一个产品。JSF的行为方法是在POJO(Plain Ordinary Java Object)中实现,JSF也是一个基于JSP/servlet的MVC框架,因此简单易学,但是也存在不少的缺陷:
     * 它是一种兴起的MVC框架,用户较少,而且相关资源也不丰富
     * JSF 并不是一个完全组件化的框架,它依然基于JSP/Servlet架构
     * JSF 的成熟还有待进一步提高

3. Tapestry
  Tapestry并不是一个单纯的MVC框架,它更像是MVC框架和模板技术结合,它不仅包含了前端的MVC框架,还包含了一种视图层的模板技术,使得Tapestry完全可以与Servlet/JSP API分离,这是一中优秀的设计。Tapestry的代码复用性很好,但是由于学起来比较难,所以在国内用得比较少,相关文档也不是十分丰富。

4. Spring MVC
  Spring 提供了一个细致完整的MVC框架,该框架为模型,视图,控制器之间提供了一个非常清晰的划分,各部分耦合性极低,它完全基于接口的编程,真正实现了与视图无关,非常灵活。它是以DispatcherServlet为核心控制器,拥有自己的IoC。 但是Spring MVC 力求完美,并与Web应用紧密的耦合,所以Spring MVC具有以下缺陷:
    * 它与 Servlet API 耦合,很难脱离Servlet独立运行,降低了Spring MVC框架的可扩展性
    * 太过细化,繁琐,降低了开发效率
    * 过分追求完美

5. WebWork
  WebWork 是一个优秀的开源组织(opensymphony)开发, WebWork的创始人是一个Java领域的名人,Rickard Oberg(他也是JBoss和XDoclet的作者),相对struts 1的不足,WebWork显得更加的优秀, 它采用了一种更加低耦合的设计,系统不再与Servlet API耦合,使得单元测试更加的简单,方便。
  WebWork 支持多种视图显示,如JSP,Velocity,FreeMarker和XSLT等,它还有自己的IoC,通过控制反转使测试更简单,它的核心部分是由两个部分组成:
      * 核心控制器 ServletDispatcher, 由控制器框架提供
      * 业务逻辑控制器 Action , 由程序员提供
WebWork 创建了代理控制器,代理控制器是一种AOP的编程方式,同struts 1 相比,WebWork有以下有点:
     * Action无需与Servlet API耦合,更容易测试
     * Action无需与WebWork耦合,代码复用率高
     * 支持更多的表示层技术,有更好的适应性

6. struts 2
  经过5年的发展,struts 1已经成为一个成熟的框架,但是由于它的设计上存在很多缺陷,面对大量MVC框架的蓬勃兴起,struts 1 开始更新,并出现了现在非常流行的struts 2.
  struts 2 可以说是WebWork2.1的升级, 并不是struts 1 的升级版本,它综合了struts 1 和WebWork的优点,但是主要核心还是采用WebWork的设计理念,所以它是一种非常类似于WebWork的MVC框架,struts 2 大量的使用拦截器来处理用户的请求,从而运行用户的业务逻辑控制器与Servlet API 分离。

struts 1 和struts 2 的对比:
     * Action实现类方面: struts 1 要求继承一个Action抽象基类,它使得一个具体问题是使用抽象类编程而不是接口;而struts 2可以实现Action接口,或者实现其他接口,使得可选和定制服务变成可能, 在struts 2 中可以用一个普通的POJO来做为Action, 没有侵入性。
     * 线程模式方面: struts 1 要求单例模式并且必须是线程安全的,因为它仅有Action的一个实例来处理所有请求,Action资源必须是线程安全的或同步的; 而struts 2 的Action对每一个请求都产生一个实例,因此没有线程安全。
     * Servlet 依赖方面: struts 1 依赖于Servlet API ,因为struts 1 的execute方法中有HttpServletRequest和HttpServletResponse,使得它不能脱离Web容器运行;struts 2 无需直接的访问,从而给开发者更多灵活的选择。
     * 表达式语言方面:
struts 1 整合了JSTL,因此可以使用JSTL表达式语言,但是JSTL的功能上还不够强大;
而struts 2 也可以使用JSTL,但是它还整合了一种更强大的表达式语言OGNL(Object Graph Notation Language), 因此,使得struts 2的表达式语言更强大。
     * 可测性方面的比较: struts 1 Action依赖于servlet API,所以它的测试不允许脱离Web容器而独立运行,如果要脱离web,则要扩展第三方的支持,struts 的TestCase; 而struts 2 则可以直接进行测试,因为struts 2 Action可以是一个POJO。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值