快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

Struts VS Spring 两种MVC框架比较

  基于Web的MVC framework在J2EE的世界内已是空前繁荣。TTS网站上几乎每隔一两个星期就会有新的MVC框架发布。目前比较好的MVC,老牌的有Struts、Webwork。新兴的MVC 框架有Spring MVC、Tapestry、JSF等。这些大多是闻名团队的作品,另外还有一些边缘团队的作品,也相称精彩,如Dinamica、VRaptor等。这些框架都提供了较好的层次分隔能力。在实现良好的MVC 分隔的基础上,通过提供一些现成的辅助类库,同时也促进了生产效率的提高。

  如何选择一个好的框架应用在你的项目中,将会对你的项目的效率和可重用是至关重要的。本文将对目前最流行、最常用的两种framework进行介绍。

  一、Struts

  Struts是Apache软件基金下Jakarta项目的一部分。Struts框架的主要架构设计和开发者是Craig R.McClanahan。Struts 是目前Java Web MVC框架中不争的王者。经过长达五年的发展,Struts已经逐渐成长为一个稳定、成熟的框架,并且占有了MVC框架中最大的市场份额。但是Struts某些技术特性上已经落后于新兴的MVC框架。面对Spring MVC、Webwork2 这些设计更精密,扩展性更强的框架,Struts受到了前所未有的挑战。但站在产品开发的角度而言,Struts仍旧是最稳妥的选择。

  Struts有一组相互协作的类(组件)、Serlvet以及jsp tag lib组成。基于struts构架的web应用程序基本上符合JSP Model2的设计标准,可以说是MVC设计模式的一种变化类型。根据上面对framework的描述,我们很轻易理解为什么说Struts是一个web framwork,而不仅仅是一些标记库的组合。但 Struts 也包含了丰富的标记库和独立于该框架工作的实用程序类。Struts有其自己的控制器(Controller),同时整合了其他的一些技术去实现模型层(Model)和视图层(View)。在模型层,Struts可以很轻易的与数据访问技术相结合,包括EJB,JDBC和Object Relation Bridge。在视图层,Struts能够与JSP, Velocity Templates,XSL等等这些表示层组件想结合。

  Struts的体系结构

  struts framework是MVC 模式的体现,下面我们就从分别从模型、视图、控制来看看struts的体系结构(Architecture)。 

  从视图角度(View)

  主要由JSP建立,struts自身包含了一组可扩展的自定义标签库(TagLib),可以简化创建用户界面的过程。目前包括:Bean Tags,HTML Tags,Logic Tags,Nested Tags,Template Tags 这几个Taglib。有关它们的具体资料请参考struts用户手册

  从模型角度(Model)

  模型主要是表示一个系统的状态(有时候,改变系统状态的业务逻辑操作也也划分到模型中)。在Struts中,系统的状态主要有ActiomForm Bean体现,一般情况下,这些状态是非持久性的。假如需要将这些状态转化为持久性数据存储,Struts本身也提供了Utitle包,可以方便的与数据库操作

  从控制器角度(Controller)

  在Struts framework中, Controller主要是ActionServlet,但是对于业务逻辑的操作则主要由Action、ActionMapping、ActionForward这几个组件协调完成(也许这几个组件,应该划分到模型中的业务逻辑一块)。其中,Action扮演了真正的业务逻辑的实现者,而ActionMapping和ActionForward则指定了不同业务逻辑或流程的运行方向。
对于Struts 如何控制、处理客户哀求,让我们通过对struts的四个核心组件介绍来详细说明。这几个组件就是:ActionServlet。Action Classes,Action Mapping(此处包括ActionForward),ActionFrom Bean。

  二、Spring

  Spring 实际上是Expert One-on-One J2EE Design and Development 一书中所阐述的设计思想的详细实现。在One-on-One 一书中,Rod Johnson 倡导J2EE 实用主义的设计思想,并随书提供了一个初步的开发框架实现(interface21 开发包)。而Spring 正是这一思想的更全面和详细的体现。Rod Johnson 在interface21 开发包的基础之上,进行了进一步的改造和扩充,使其发展为一个更加开放、清楚、全面、高效的开发框架。

  Spring是一个开源框架,由Rod Johnson创建并且在他的著作《J2EE设计开发编程指南》里进行了描述。它是为了解决企业应用开发的复杂性而创建的。Spring使使用基本的JavaBeans来完成以前只可能由EJB完成的事情变得可能了。然而,Spring的用途不仅限于服务器端的开发。从简朴性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。

  简朴来说,Spring是一个轻量的控制反转和面向切面的容器框架。当然,这个描述有点过于简朴。但它的确概括出了Spring是做什么的。为了更好地理解Spring,让我们分析一下这个描述: 

  1、轻量,从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依靠于轻量??从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依靠于Spring的特定类。

  2、控制反转??Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,对象被动地传递它们的依靠而不是自己创建或者查找依靠对象。你可以认为IoC与JNDI相反??不是对象从容器中查找依靠,而是容器在对象初始化时不等被哀求就将依靠传递给它。 

  3、面向切面??Spring包含对面向切面编程的丰富支持,答应通过分离应用的业务逻辑与系统服务(例如审计与事物治理)进行内聚性的开发。应用对象只做它们应该做的??完成业务逻辑??仅此而已。它们并不负责(甚至是意识)其它的系统关注点,例如日志或事物支持。 

  4、容器??Spring包含和治理应用对象的配置和生命周期,在这个意义上它是一种容器。你可以配置你的每个bean如何被创建??基于一个配置原形为你的bean创建一个单独的实例或者每次需要时都生成一个新的实例??以及它们是如何相互关联的。然而,Spring不应该被混同于传统的重量的EJB容器,它们常常是庞大与粗笨的,难以使用。 

  框架:Spring使由简朴的组件配置和组合复杂的应用成为可能。在Spring中,应用对象被声明式地组合,典型地是在一个XML文件里。Spring也提供了很多基础功能(事务治理、持久性框架集成等等),将应用逻辑的开发留给了你。 

  所有Spring的这些特征使你能够编写更干净、更可治理、并且更易于测试的代码。它们也为Spring中的各种子框架提供了基础。
返回类别: 教程
上一教程: jsp源码实例4(搜索引擎)
下一教程: Apache+Servlet+Jsp环境设置(下)

您可以阅读与"Struts VS Spring 两种MVC框架比较"相关的教程:
· Struts,MVC的一种开放源码实现用这种servlet和JSP框架治理复杂
· 基于MVC模式的Struts框架概述
· J2EE MVC模式JSF与STRUTS的异同
· Spring+Struts+Hibernate入门例子Wiring Step By Step
· MetaDiff??一个模式比较框架
    微笑服务 优质保证 索取样品