您的位置:首页 > 编程语言 > Java开发

SSH之旅(三)Struts1和Struts2的前世今生

2015-12-15 12:04 375 查看
  以前做Java项目,前端经常用Struts2,但不由自主的总会想到它和Struts1有什么不同啊?Struts2是Struts1的升级吗?
一、背景
  Struts是全世界最早的MVC框架,其作者是JSP规范的制定者,并参与了Tomcat的开发,这个名字来源于在建筑和滑翔机中用来支持的金属架
,猜测着 Struts 的开发者大概是希望用该框架来支持 JSP
、 Servlet 、 Java
这些技术在 Web 项目中的使用。
  Struts 的第一个版本在 apache网站上发布的时候。它只提供了一种分离视图和业务应用逻辑的 Web 应用方案。因为在 Struts 之前,开发人员都是在 JSP 里写入处理业务逻辑的 Java代码,尤其是涉及到数据库和页面 Form 表单数据之间交互的时候,开发人员在每个页面都要写入像连接数据库这样的
Java代码,导致了大量的代码冗余,而且每个页面显示速度和性能都不是很好,这是因为页面中的存储数据的 Java 对象都需要从内存中读取,势必影响性能。(这就是以前的Model1模式,详情见博客——《JSP的Model1和Model2



  基于这种model1模式的弊端,Model2也就顺应潮流推送出来。有些时候开发者也把Model2模式成为MVC模式,也正是在这样一个大背景下,当Struts
这种 Web 应用方案一出现,每个开发人员都把它视为把自己从繁重的开发工作中解放出来的利器。所以在 2001-2003 这几年,大量的为企业做Web 应用系统的 IT 公司在项目架构中都采取 Struts 作为开发中必须使用的框架。
  当然从 2003 年开始,同类型的 Web 项目开发框架也开始出现在广大开发者的视野中,由于Struts 对新技术的支持不够,因此在 2006 年和 WebWork 的设计者一起将这两个框架合并在一起,形成了今天的 Struts2框架,这个框架是综合了原有两个旧框架的特点。而又去除了很多它们的缺点,特别是
Struts 的一些缺点,比如支持的视图技术太单一只支持 JSP ,还有和Servlet 关系太紧密,不适合现在的松耦合开发理念等等。Struts2 框架实际上也可以称为 WebWork 的一个最新版本,它的
MVC模式实现的方法更多是来自于 WebWork 而不是 Struts 。
二、比较

1)在Action实现类方面的对比:
  Struts1要求Action类继承一个抽象基类;Struts1的一个具体问题是使用抽象类编程而不是接口。
  Struts2 Action类可以实现一个Action接口,也可以实现其他接口,使可选和定制的服务成为可能。Struts2提供一个ActionSupport基类去实现常用的接口。使Action接口不是必须实现的,只有一个包含execute方法的POJO类(普通的Java类)都可以用作Struts2的Action。
2)线程模式方面的对比:
  Struts1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。Action资源必须是线程安全的或同步的;
  Struts2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。
3)Servlet依赖方面的对比:
  Struts1Action依赖于Servlet API,因为Struts1Action的execute方法中有HttpServletRequest和HttpServletResponse方法。
  Struts2 Action不再依赖于Servlet API,从而允许Action脱离Web容器运行,从而降低了测试Action的难度。当然,如果Action需要直接访问HttpServletRequest和HttpServletResponse参数,Struts2Action仍然可以访问它们。但是,大部分时候,Action都无需直接访问HttpServetRequest和HttpServletResponse,从而给开发者更多灵活的选择。
4)可测性方面的对比:
  测试Struts1 Action的一个主要问题是execute方法依赖于ServletAPI,这使得Action的测试要依赖于Web容器。为了脱离Web容器测试Struts1的Action,必须借助于第三方扩展:StrutsTestCase,该扩展下包含了系列的Mock对象(模拟了HttpServetRequest和HttpServletResponse对象),从而可以脱离Web容器测试Struts1的Action类。
  Struts2 Action可以通过初始化、设置属性、调用方法来测试。
三、总结
  当Struts2遇到Struts1,完胜的占有了市场,以上对比只是宏观上的对比,具体的区别还是很多的,如:封装请求参数、视图的绑定值、数据校验上也不同,但表达式语言都是以JSTL为主。而且虽然Struts2很优秀,但在MVC领域里还有另外的替代者:SpringMVC和JSF,学无止境。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  struts mvc ssh 开发框架 web