第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
分享到:
相关推荐
### Struts2讲义知识点概览 #### 一、Struts2的历史与发展 - **Struts框架的发展历程**: - Struts最初版本发布于2000年,是Java Web开发领域的一个重要里程碑。 - 随着时间的发展和技术的进步,Struts逐渐暴露...
- **Struts2** 和 **Struts1** 虽然名字相似,但它们之间并没有直接的继承关系。实际上,Struts2的内核是基于WebWork框架的,而WebWork框架本身就是一个非常优秀的Web应用框架。 - **Struts1** 主要是基于Servlet ...
要深入学习和掌握Struts2,建议阅读官方文档,参与实际项目实践,也可以参考相关的技术书籍和教程,例如《Struts2技术内幕——深入解析Struts2架构设计与实现原理》等资源,来提升对Struts2框架的全面理解。
struts2讲义struts2讲义struts2讲义struts2讲义struts2讲义struts2讲义struts2讲义struts2讲义struts2讲义struts2讲义struts2讲义
Struts2是Apache软件基金会的开源项目,它是Struts1的升级版,旨在解决Struts1在可扩展性和灵活性上的不足。Struts2提供了更强大的拦截器机制、更加灵活的配置方式和丰富的插件支持,使得开发者能够更高效地构建复杂...
Struts2的启动配置与Struts1有所不同。在Struts1中,框架通过Servlet启动,而在Struts2中,它通过Filter启动。在`web.xml`配置文件中,需要定义一个名为`struts2`的过滤器,类为`org.apache.struts2.dispatcher....
### Struts2框架详解 #### 一、Struts2框架介绍与概述 ##### 1.1 Struts2框架概述 Struts2是一个基于MVC(Model-View-Controller)模式的开源Java Web应用框架,它提供了强大的功能来帮助开发者构建灵活、可扩展...
本书《Struts2技术内幕——深入解析Struts2架构设计与实现原理》结合提供的《struts2基础.chm》资料,为我们提供了深入理解Struts2内部机制的机会。 首先,Struts2的核心在于它的拦截器(Interceptor)机制。拦截器...
Struts2是Apache软件基金会下的一个项目,它是对Struts1的升级,吸收了WebWork的优点,提供了一种更灵活、更强大的MVC实现。它强调了类型安全的Action调用,支持拦截器模式,使得业务逻辑和控制逻辑分离更加清晰。 ...
核心技术篇首先分析了Struts2中多种具有代表性的设计模式,然后对Struts2中的精华——OGNL表达式引擎和XWork框架的原理及机制进行了全面深入的分析和讲解。运行主线篇首先对Struts2的两大运行主线——初始化主线和...
Struts2是一个基于MVC(Model-View-Controller)设计模式的Java web应用程序框架,它在Struts1的基础上进行了很多改进和增强,提供了更强大的功能和更好的性能。本教程将深入探讨Struts2的核心概念、架构以及实际...
"Struts2 技术内幕——深入解析Struts2架构设计"这本书深入探讨了Struts2的核心机制和设计理念,帮助开发者更好地理解和应用这个框架。 Struts2的核心组件包括Action、Interceptor、Result和Configuration。Action...
第2章 Web基础技术简介第3章 Struts2核心技术第4章 另一Struts2核心技术:拦截器第5章 Struts2标签库第6章 Struts2非JSP视图技术第7章 Struts2类型转换技术第8章 Struts2输入校验第9章 Struts2国际化第10章 Struts2...
它继承了Struts1的优点,并结合了WebWork框架的功能,提供了更强大的控制层解决方案。Struts2的主要目标是简化Web应用的开发过程,提高代码的可维护性和可测试性。 在Struts2中,Action是核心组件,它是业务逻辑的...
这篇博客“Struts2 ——2、各种Action写法和配置”着重讲解了在Struts2框架中如何创建和配置不同的Action,以便更好地理解和运用这个框架。 在Struts2中,Action是处理用户请求的核心组件,它负责业务逻辑的处理,...
首先,Struts2的出现是为了解决Struts1在MVC模式中的局限性,它通过提供更灵活的配置、更强大的拦截器(Interceptor)体系以及与Spring等其他框架的无缝集成,提升了开发效率和应用性能。框架的核心组件包括Action、...
2. **ActionForm**:在Struts中,表单数据通常由ActionForm对象接收。创建一个继承自Struts的FormBean类,定义属性来存储图片文件。 3. **Struts配置**:在struts-config.xml中配置Action,指定处理图片上传请求的...
《SSM框架整合详解——基于spring-mybatis-struts2-master的实战分析》 在Java Web开发领域,SSM(Spring、Struts2、MyBatis)框架的组合被广泛使用,因其灵活性和强大的功能而备受青睐。本篇文章将深入探讨这个...