日期:2014-05-17  浏览次数:20762 次

总结了一下Struts1和Struts2的区别,随便散分
大家都知道Struts1是一个老的成熟的Java Web开发框架,Struts2其实是一个老的成熟的框架(2006产生,近6年了)。

说区别之前先说一下struts1的缺点,也就是为什么要开发struts2来代替1呢?

一 Struts1的缺点 
(1) 鸡肋的AactionForm; 
(2) 耦合性太强,导致单元测试困难;

1:在现代企业软件开发中,分层和解耦是两个必须考虑的要素,经典的软件分层结构如图:
表现层
业务逻辑层
数据访问层
其中,数据访问层实现对数据库操作的封装,以隔离具体业务和数据库之间的联系;而业务逻辑层实现对业务逻辑的封装,隔离用户操作的界面和具体业务逻辑;表现层即用户界面层,提供用户操作接口。这种分层封装的好处是分化了复杂的系统,同时也提高了系统的可维护性,使得开发过程中的分工协作更加方便快捷,采用这种层次结构,上层应该只依赖于它的下层结构,而不应该跨层依赖;同时,下层不应该依赖于它的上层结构,也就是说,业务逻辑层和数据访问层绝对不要依赖于表现层。也业务逻辑层和数据库访问层的代码中,不要出现调用表现层的代码的情况。遵循这个原则将简化在相同的基础上替换表现层的代价,也使得表现层的修改所带来的连锁反应尽可能小。

Struts 是属于表现层的技术,在Struts中,为了接受表单的数据,我们必须编写一个从Struts 的ActionForm类继承的类,否则你就只能从HttpServletRequest中提取数据了,然而,不使用ActionForm,意味着你需要自己对表单数据做初始化,以及自己编写代码对表单数据进行验证。使用从ActionForm继承的类,如果更换了Web框架,这个类也将会被废弃。ActionForm中的数据往往需要传递给业务逻辑层和数据访问层进行处理,为了避免业务逻辑层和数据访问层依赖于Struts,通常我们会编写一个和ActionForm类具有相同属性的普通JavaBean类,考虑到程序中还会存在着PO(持久化对象)和JavaBean对象之间的数据复制,将使我们不厌其烦的来回复制大量的表单数据。

2:耦合性大、单元测试困难 
Struts1 中的Action类与Servlet API耦合在一起,其核心方法 executs 依赖于Servlet API 中的HttpServletRequest 和 HttpServletResponse ,方法如下:

public ActionForward execute(ActionMapping mapping,ActionForm form,
Javax.servlet.http.HttpServletRequest request,
Javax.servlet.http.HttpServletResponse response)
因为HttpServletRequest 和 HttpServletResponse 是由Servlet容器负责实例化的,因此Action类的测试要依赖于web容器,单元测试很难实现。(当然会有第三方测试工具)

上述两点只是举例说明Struts1在设计上的不足,还有很多不一一列举。
二 Struts2 出现

全文见博客http://www.yongzhi.info/?p=207

------解决方案--------------------
接分··········沙发 哈哈
------解决方案--------------------
我的这个是板凳么?有木有。。。。
------解决方案--------------------
顶……
------解决方案--------------------
学习加接分
------解决方案--------------------
没学过struts1,直接学的struts2,不会看了很有帮助,最主要的是楼主真给力,接分
------解决方案--------------------
觉得1.X的缺点还得加一个很明显的,就是1.X是单线程的,无法应对多线程的问题。
------解决方案--------------------
探讨
觉得1.X的缺点还得加一个很明显的,就是1.X是单线程的,无法应对多线程的问题。

------解决方案--------------------
当然2肯定比1好用,不然有了1就不会又2了。呵呵,真的觉得2非常好用。祝楼主好运
------解决方案--------------------
接分了。谢谢楼主分享
------解决方案--------------------
接了,感谢分享
------解决方案--------------------
LZ 给的分太给力了! 不过问题说的也很到位 学习了!!!
------解决方案--------------------
感谢分享。
------解决方案--------------------
探讨

觉得1.X的缺点还得加一个很明显的,就是1.X是单线程的,无法应对多线程的问题。

------解决方案--------------------
看来我来的还算不晚,接分了!一会儿去楼主博客看看去。
------解决方案--------------------
嘿嘿学习了
------解决方案--------------------
学习接分
------解决方案--------------------
没怎么用2啊,学习了
------解决方案--------------------
很久不用这些东西,当初只学了struts1。。至今一直未用 其他框架!
------解决方案--------------------