`

《Struts2 讲义》——连载1

阅读更多

 

第1章  Struts过时了吗?

 

作者:吴峻申(黑暗浪子)

提示:原文连载于JavaEye,转载请自觉注明作者、出处等相关信息


  Struts是目前世界上所有使用Java语言进行J2EE项目开发的人员经常使用的基于MVC模式的Web项目开发框架之一。它也是目前最早的Web项目开发框架。由于它的易学易用,对入门者来说学习所花时间少,也简单容易上手,因此使用Struts的开发人群是目前所有Web项目开发框架使用人群中最大的。可是近几年,新的视图技术,如FreeMarker、Velocity技术。还有设计模式的大行其道。开发人员越来越觉得Struts在这些方面有先天的不足。并不能很优雅和优秀的完成Web项目开发工作。原因有很多种,一方面是Struts出现的时间比较早,现在流行的技术都是在Struts后出现的。因此必然导致Struts对新技术的支持不够。另一方面很多新兴的Web项目开发框架都是很好的体现了现有开发理念的使用。对Struts的影响和威胁都很大。这样很多近几年参加工作的IT从业人员都不喜欢使用Struts,而是去采用Tapestry、JSF等框架去进行他们的开发工作。

 

 

1.1  Struts历史发展过程


  Struts这个名字来源于在建筑和滑翔机中用来支持的金属架。以笔者的理解,Struts的开发者大概是希望用该框架来支持JSP、Servlet、Java这些技术在Web项目中的使用。


  当2001年春天,Struts的第一个版本在apache网站上发布的时候。它只提供了一种分离视图和业务应用逻辑的Web应用方案。因为在Struts之前,开发人员都是在JSP里写入处理业务逻辑的Java代码,尤其是涉及到数据库和页面Form表单数据之间交互的时候,开发人员在每个页面都要写入像连接数据库这样的Java代码,导致了大量的代码冗余,而且每个页面显示速度和性能都不是很好,这是因为页面中的存储数据的Java对象都需要从内存中读取,势必影响性能。所以当像Struts这种Web应用方案一出现,每个开发人员都把它视为把自己从繁重的开发工作中解放出来的利器。所以在2001-2003这几年,大量的为企业做Web应用系统的IT公司在项目架构中都采取Struts作为开发中必须使用的框架。

 

  从市场推广的角度来看,Struts也是一个创建知名品牌的案例。由于它的闻名遐迩,很多开发人员熟悉Struts的应用,一批批成功应用Struts的Web项目如雨后春笋般的显现,这样就算是入门者也可以依据前人的优秀经验应用Struts去实现更多的Web项目。随着使用它作为项目开发框架的公司和人员越来越多。作为公司的领导层可以让实际开发人员把注意力更加着重放在行业知识,业务领域的研究实现工作上。技术作为实现项目的障碍这种认识已经荡然无存。


  Struts刚出现的时候,其实在它之前使用j2ee开发的Web项目都是使用Model1的设计模式,Model1模式有大致三种常用的开发方式,比如之前所述的将Java代码写在JSP中,就是第一种常见的方式。还有一种就是将部分业务逻辑实现代码封装成为JavaBean,在JSP中调用这些JavaBean。此种方式解决之前所述冗余代码的问题,而且从内存中只读取一次封装了数据的Java对象,没必要频繁的读取Java对象。它是Model1模式的典型结构,如图1.1所示。第三种就是将Java中已经是标准的内置对象在JSP中调用。比如J2EE的JDBC,JSP中直接使用JDBC的标准类和方法。实际上和第二种方式是类似的,只不过第二种方式中调用的是开发者自己开发的,而第三种方式调用的是Java的标准类和方法。Model1模式对于中小项目的开发的确还是很有优势的,据笔者所知有些企业为了避免开发带来的风险,而且这些企业的相关环境决定使用其它模式没有这么迫切,因此还在使用这种模式在开发自己的企业应用。但是它的缺点太明显了,首先如果企业级应用需要改动原有需求或者新增需求,那势必需要改动很多代码,开发工作量会很大。其次就是业务逻辑代码和使用视图来表示页面的代码是在JSP中混合的,如果某个JSP页面需要重用的话,那是根本无法实现的。因为业务逻辑在每个页面肯定不同的,怎么能用一个JSP中的业务逻辑套用到另外一个JSP页面中呢?


 

 

图1.1  Model1模式结构

 

 

  基于这些原因,在开发者中有人提出了Model2模式,这种模式保留了Model1的优点,又针对它的缺点进行了修正和改良。Model2模式基础概念是组件化,它的设计者在最初的设想是开发Web项目时候,如果需要实现某个业务逻辑将封装好的组件进行调用,而开发者不需要关心该组件内部是如何实现的。这就好比购买了一台电脑,直接开机使用就可以,没必要关心电脑内部是如何组成的,内部又是怎样实现让用户使用电脑功能这些细节化的东西。该模式采用业务逻辑、视图分离的方法,让JSP之负责展现表示功能,相应的业务逻辑由Java来实现,这样当开发新的需求或者修改原有需求时候没必要在JSP中更改。而且JSP也可以被复用。具体结构如图1.2所示。

 

 


 

1.2  Model2模式结构

 

 

  在有些时候,开发者也把Model2模式称为“MVC”模式。“MVC”是Model、View、Controller这三个英文单词的缩写。“Model”代表的业务逻辑这块由Java实现的组件。“View”则代表了表示界面,当时主要是使用JSP技术来实现,而现在还有笔者之前提到的FreeMarker、Velocity这些实现表示界面的视图技术。“Controller”代表的是处理流程控制,主要功能是实现业务逻辑如何和表示界面相关联的技术。为了方便笔者的写作,也为了让读者不引起歧义,以后章节中都将Model2模式称为MVC模式。 


  由于MVC模式的提出,彻底解决了Model1模式的缺点,很多开发人员开始使用这种模式来解决他们实际工作中碰到的各种各样Web项目开发问题。也正是在这样一个大背景下,诞生了Struts这个第一个运用了MVC模式,也是使用其的开发人员全世界最多的Web项目开发框架。
当然从2003年开始,同类型的Web项目开发框架也开始出现在广大开发者的视野中,由于Struts对新技术的支持不够,还有一些如FormBean一些Struts技术细节是否有必要实现的争论也让开发者开始质疑Struts的优越性。


  Struts的设计者也意识到Struts的一些局限性和缺点,必须进行重新设计和改良。因此在2006年和WebWork的设计者一起将这两个框架合并在一起,形成了今天的Struts2框架,这个框架是综合了原有两个旧框架的特点。而又去除了很多它们的缺点,特别是Struts的一些缺点,比如支持的视图技术太单一只支持JSP,还有和Servlet关系太紧密,不适合现在的松耦合开发理念等等。


  Struts2框架实际上也可以称为WebWork的一个最新版本,它的MVC模式实现的方法更多是来自于WebWork而不是Struts,Struts框架其实还发展了另外一个分支框架Shale,这个框架的设计思想更多是来自于JSF,只不过通过Struts的基础配置和代码来实现,由于JSF和Struts、WebWork的开发理念有很大的区别,JSF可以称为Web化的Swing。让桌面应用程序开发结构在Web浏览器中实现出来。固然这点对现在的开发人员也很有吸引力,但是笔者认为还是有些不能和Struts、WebWork相比的弱点(在后面的小节中将详细叙述)。所以对于Struts的演变笔者更认为Struts2才是最正统的继承。而Shale则只能算作一个比较好的补充而已。


  在下一节,笔者将详细概述Struts2的特点及其笔者认为需要改进的部分。

  • 大小: 32.1 KB
  • 大小: 31.2 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics