JavaWeb整合开发实例精通:Struts+Hibernate+Spring
上QQ阅读APP看书,第一时间看更新

第1章 Struts概述

Struts是目前世界上所有使用Java语言进行J2EE项目开发的人员,经常使用的基于MVC模式的Web项目开发框架之一。它也是目前最早的Web项目开发框架。由于它的易学易用,对入门者来说学习所花时间少,也容易上手,因此使用Struts的开发人群是目前所有Web项目开发框架使用人群中最大的。可是近几年,随着新的视图技术(如FreeMarker、Velocity技术),还有设计模式的大行其道,开发人员越来越觉得Struts在这些方面有先天的不足,并不能很优雅和优秀地完成Web项目开发工作。

原因有很多种,一方面是Struts出现的时间比较早,现在流行的技术都是在Struts后出现的,因此必然导致Struts对新技术的支持不够。另一方面很多新兴的Web项目开发框架都很好地体现了现有开发理念的使用,对Struts的影响和威胁都很大,所以近几年参加工作的很多IT从业人员都不喜欢使用Struts,而是采用Tapestry、JSF等框架进行他们的开发工作。

值得庆幸的是,Struts的开发人员也意识到了Struts的这些缺点,因此在2006年Struts和另外一个Web项目开发框架WebWork进行了合并,形成了新的Web项目开发框架Struts 2。这个所谓的Struts 2其实就是WebWork的一个新版本。

●一方面WebWork在IOC、基于接口编程、新的视图技术支持等方面,具有先天优势。

●另一方面Struts使用人群的庞大以及学习曲线的平缓,还有它的技术延续性,使得这两个项目开发框架各取所长,互相补充,形成了一个更有竞争力,更具有健壮性的新框架。

所以Struts并没有过时,它已经进化成一个崭新的Web项目开发框架。本书这部分就针对Struts 2的具体技术细节进行了详细附例的说明。而本章则把Struts和Struts 2之间的“恩恩怨怨”,以及同类的Web项目开发框架产品和Struts 2的关系具体介绍。希望读者在学习Struts 2技术之前,能对Struts 2有清晰正确的认识和了解。

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作为开发中必须使用的框架。

1.1.1 Model设计模式的演进

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

其实在Struts出现之前,使用J2EE开发的Web项目都是使用Model1的设计模式,Model1模式有三种常用的开发方式:

(1)之前所述的将Java代码写在JSP中,就是第一种常见的方式。

(2)还有一种就是将部分业务逻辑实现代码封装成为JavaBean,在JSP中调用这些JavaBean。此种方式解决之前所述冗余代码的问题,而且从内存中只读取一次封装了数据的Java对象,没必要频繁地读取Java对象。它是Model1模式的典型结构,如图1.1所示。

(3)第三种就是将Java中已经是标准的内置对象在JSP中调用。比如J2EE的JDBC(JSP中直接使用JDBC的标准类和方法)。实际上和第二种方式是类似的,只不过第二种方式中调用的是开发者自己开发的,而第三种方式调用的是Java的标准类和方法。

Model1模式对于中小项目的开发还是很有优势的,有些企业为了避免开发带来的风险,同时这些企业的相关环境决定使用其他模式也没有那么迫切,因此还在使用这种模式开发自己的企业应用。但是它有以下明显的缺点:

(1)首先,如果企业级应用需要改动原有需求或者新增需求,那势必需要改动很多代码,开发工作量会很大。

(2)其次,就是业务逻辑代码和使用视图来表示页面的代码是在JSP中混合的,如果某个JSP页面需要重用,是根本无法实现的。因为业务逻辑在每个页面是不同的,无法用一个JSP中的业务逻辑套用到另外一个JSP页面中。

图1.1 Model1模式结构

基于这些原因,在开发者中有人提出了Model2模式,这种模式保留了Model1的优点,又针对它的缺点进行了修正和改良。Model2模式基础概念是组件化,它的设计者在最初的设想是开发Web项目时,如果需要实现某个业务逻辑将封装好的组件进行调用,而开发者不需要再关心该组件内部是如何实现的。

这就好比购买了一台电脑,直接开机使用就可以,没必要关心电脑内部是如何组成的,内部又是怎样实现让用户使用电脑功能这些细节化的东西。该模式采用业务逻辑、视图分离的方法,让JSP只负责展现表示功能,相应的业务逻辑由Java来实现,当开发新的需求或者修改原有需求时没必要在JSP中更改,而且JSP也可以被复用。具体结构如图1.2所示。

图1.2 Model2模式结构