随着JSP 与Servlet 技术大量应用于以Web 为基础的应用程序,为了提升Web 应用程序之可维护性与重复使用性,Java 开发人员提出了一些较佳的开发模式。比较常见的两种JSP应用架构别为Model1 与Model 2。
Mode1 1是一个以JSP文件为中心的模式, JSP不仅负责表现逻辑,也负责控制逻辑。逻辑耦合在页面中,这种处理方式,对一些规模很小的项目是可以的,但是用在开发大型项目时,页面很难把握流向,界面间关联性太强,使得程序的修改与维护变得困难;此外程序逻辑与页面显示交叉,既不便于分工合作也不利于代码的重用,这样的程序其健壮性和可伸缩性都不好。
Model 2 中Servlet扮演前端Controller 角色,客户端的请求不再直接送给JSP,而是送给Servlet,再由Servlet根据具体的请求调用不同的事务逻辑,并将处理结果返回到合适的页面。最重要的是Model2将业务逻辑从JSP文件剥离,分离后,JSP文件单纯只是显示,这就是常说的View;而独立出来的事务逻辑和数据处理等是常说的Model,再加上控制器Control本身,即为MVC模式。
MVC模式为大型程序的开发及维护提供了巨大的便利。但是Model2的优点也造成了他的缺点,因为解耦,分层,使得Model2的编写变得复杂,尤其是大型项目,Servlet过多,转向频繁,流程,配置等不易集中管理。
(具体的Model1和Model2可参见J2EE WEB应用架构发展分析)
Struts是在Model2的基础上发展起来的,由Apache 基金会Jakarta 项目组开发的开源框架,它采用MVC模式,能够很好地帮助java 开发者利用J2EE开发Web应用。Struts 也是面向对象设计,将MVC模式"分离显示逻辑和业务逻辑"的能力发挥得淋漓尽致。
Struts框架的核心是一个弹性的控制层,基于如 Java Servlets,JavaBeans,ResourceBundles与XML等标准技术,以及 Jakarta Commons 的一些类库。Struts由一组相互协作的类(组件)、Servlet以及jsp tag lib组成。基于struts构架的web程序基本符合Model2的设计标准,可以说是一个传统 MVC设计模式的一种变化类型。
Struts创建的初衷是希望通过对该项目的研究,改进和提高JSP、Servlet、标签库,国际化支持以及面向对象等技术的水准。
使用Struts为业务应用的每一层提供支持。目的是为了帮助我们减少在运用MVC设计模型来开发Web应用的时间。减轻编写和控制程序的复杂度,提高开发效率。
此外,Struts的页面导航,对界面的控制,也比Model2更加清晰,通过一个配置文件,即可基本理顺整个系统各部分之间的联系,这对于后期的维护很有好处。
其实Struts思想还是MVC(或Model2)的思想,只是对流程进行了封装和组合,比Model2模式可以更好完成一些繁重的工作。如果想混合使用Servlets和JSP的优点来建立可扩展的应用,Struts是一个不错的选择。