当前位置: 移动技术网 > IT编程>开发语言>Java > Struts1和struts2的区别_动力节点Java学院整理

Struts1和struts2的区别_动力节点Java学院整理

2019年07月19日  | 移动技术网IT编程  | 我要评论

struts2其实并不是一个陌生的web框架,struts2是以webwork的设计思想为核心,吸收了struts1的优点,因此,可以认为struts2是struts1和webwork结合的产物。

简单来说二者的区别是:   

     一个是stuts1 ,一个是stuts2,这是最大的区别,技术方面,stuts1有个核心控制器,但是只提供了一个接口,也就是execute,还要配置actionform之类的,很麻烦,所以依赖性比较强;而stuts2是针对拦截器开发的,也就是所谓的aop思想,可以配置多个action,用起来比较方便,但是因为请求之前的拦截器有一些注入的操作,速度相对stuts1来说慢一点。

一、mvc简介

      struts2是一个兼容struts1和webwork的mvc框架,既然,提到了mvc框架,就不得不对mvc框架做一个简单介绍,仅限于简单介绍,如果,想了解更多的mvc的知识可以查看相关的文档,或者找一本struts1的书籍,相信上面关于mvc的篇幅不会很少。言归正传,其实,java目前出现的这些框架而言,其最终目的都是为了接触耦合,不论是spring、hibernate或mvc框架,目的都是为了接触耦合增加复用。mvc接触的是view和model间的耦合。  

      mvc包含三个基础部分:model、view和controller,这三个部分以最小的耦合协同工作,以增加程序的可扩展性和可维护性。各个部分的实现技术可以总结如下:

        1)model:javabean、ejb的entitybean
        2)view:jsp、struts的taglib
        3)controller:struts的actionservlet、action

概括起来mvc的优点主要有一下方面:

        1)多个视图可以对应一个模型。按mvc设计模式,一个模型对应多个视图,可以减少代码的复制及代码的维护量,一旦模型发生改变,也易于维护
        2)模型返回的数据与显示逻辑分离。模型数据可以应用任何的显示技术,例如,使用jsp页面、velocity模板或者直接产生excel文档等
        3)应用被分隔为三层,降低了各层之间的耦合,提供了应用的可扩展性
        4)控制层的概念也很有效,由于它把不同的模型和不同的视图组合在一起,完成不同的请求。因此,控制层可以说是包含了用户请求权限的概念
        5)mvc更符合软件工程化管理的精神。不同的层各司其职,每一层的组件具有相同的特征,有利于通过工程化和工具化产生管理程序代码

         对于mvc的概念性的东西也就废话到此,其关键的地方就是各个模块的实现技术分别是什么。

二、struts2简介

        struts2既然是从struts1发展而来,但实际上struts2与struts1在框架的设计思想上面还是有很大的区别,struts2是以webwork的设计思想为核心,为什么struts2不沿用struts1的设计思想,毕竟struts1在目前的企业应用中还是有非常大的市场在的,那么,来看下struts1的一些缺点吧:

        1)支持的表现层技术单一
        2)与servlet api严重耦合,这点可以从action的execute的方法声明里面就可以看的出来
        3)代码依赖struts1 api,有侵入性,这点可以从写action类和formbean的时候看的出来,action必须实现struts的action类

        而struts2之所以以webwork的设计思想为其核心,一点就是最近webwork的上升势头,再就是webwork没有struts1上面的那些缺点,更符合mvc的设计思想,也更利于代码的复用。

        基于以上介绍可以看的出,struts2体系结构与struts1的体系结构有很大的差别,struts1是使用actionservlet做为其中心处理器,struts2则使用一个拦截器(filterdispatcher)做为其中心处理器,这样做的一个好处就是将action类和servlet api进行了分离。

        struts2的简单处理流程如下:

        1)浏览器发送请求
        2)中心处理器根据struts.xml文件查找对应的处理请求的action类
        3)webwork的拦截器链自动对请求应用通用功能,例如:workflow、validation等功能
        4)如果struts.xml文件中配置method参数,则调用method参数对应的action类中的method方法,否则调用通用的execute方法来处理用户请求
         5)将action类中的对应方法返回的结果响应给浏览器

三、struts2与struts1对比

         1)action类的实现方式:
               struts1的action在实现的时候必须扩展action类或者action的子类,struts2的action类实现的时候可以不用实现任何类和接口,虽然struts2中提供一个actionsupport类,但是,不是必须的。
          2)struts1的action类是单例模式,必须设计成线程安全的,struts2则为每一个请求产生一个实例
          3)struts1的action类依赖与servlet api,从其execute的方法签名可看出,execute方法有两个servlet的参数httpservletrequest和httpservletresponse,struts2则不依赖于servlet api
          4)以为struts1依赖于servlet api这些web元素,因此对struts1的action进行测试的时候是很困难的,需要借助与其他的测试工具,struts2的action可以象测试其他的一些model层的service类一样进行测试
           5)struts1的action与view通过actionform或者其子类进行数据传递,虽然也有lazyvalidationform这样的actionform的出现,但是,还是不能象其他层面那样通过一个简单的pojo进行数据传递,而struts2将这样的奢望变成了现实
           6)struts1绑定了jstl,为页面的编写带来方便,struts2整合了ongl,也可以使用jstl,因此,struts2下的表达式语言更加强大

四、struts2与webwork对比

        struts2实际上就是webwork2.3,不过,struts2还是与webwork有少许的差别:
        1)struts2不再支持内置ioc容器,改用spring的ioc容器
        2)struts2对于webwork的一些ajax的特性的标签改用dojo进行替换

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网