zoukankan      html  css  js  c++  java
  • Struts1与Struts2比较(完整版)

         对于struts1和struts2都已经用它们开发过项目多少对它们都有所了解,因此有必要放到一起对比对比它们的异同,也为更深入的学习他们做好铺垫,从目前公司里面使用的情况来看,struts2使用的要更广泛一些。

         如果开发新的项目不是以前遗留下来的系统,一般都会选择struts2来开发,看完它们的异同你就会知道选择哪一个框架,但从了解和学习的角度看从struts1开始入门再了解struts2或许更容易理解和掌握。


    struts发展历

    struts在2001年发布了第一个版本,在当时的目的是为了解决web应用程序中页面展示与应用层业务逻辑区分出来,而在struts出现之前都是将业务逻辑写在jsp页面之中,后台和前台的界限并不是特别明确。

    自第一版struts发布以来,它就成为了web应用的业界标准,因为当时没有一个框架比它优秀,它的炙手可热也为它带来了机遇和改变,一方面需要跟上web应用对web框架需求的不断要求,另一方面也要与竞争激烈的其它框架的特点相融合,才能使得自己永远处于优势地位,这些都推动了它新的版本不断出现。

    在2002年它又发布了WebWork框架,这个框架在struts1基础之上进行了很大的改动,引入了新的概念和新的技术,但有一个缺点是不兼容struts1,因此05年再一次升级将webwork升级为struts2,struts2完全兼容struts1对立面的一些actionform、actionforwad等都支持,从技术上来说同webwork是一样的,易于使用上struts2要比strus1/webwork都好用,这也是它流程的一个原因。

    线程安全

         struts1中我们在web.xml里面定义一个servlet的时候,我们可以给他们设置一个“load-on-startup” 的值,如果 Servlet 的 load-on-startup 配置项大于 0,那么在 Context 容器启动的时候就会被实例化,并且tomcat给每一个servlet加载并且实例化一个对象。


         我们可以将容器理解为一个上下文对象,比如context很多的对象都可以放到里面、它负责给我们实例化、管理生命周期等。
    Struts1 为线程不安全,它的action继承了servlet,tomcat再实例化servlet时采用的是单利模式,只实例化出一个对象,如果有静态成员变量将导致线程不安全

         Struts2 中的action只是一个简单的Java类,通过拦截器机制对servlet进行了封装不需要继承servlet,当每次请求到达action时将为每个请求实例化出一个新的action对象,是易空间换取安全,在多线程里面也有一种方式是利用空间换取时间的方式保证线程安全。

         struts2action通常交给Spring管理, spring默认是单例保存每一个对象,即spring负责实例化的对象保存在容器中,且只有一份,但是为了线程安全往往设置属性scope=“prototype”,这样每次有一个请求到达action时就会得到一个新的action对象。

         scope属性表示bean的作用域,当一个bean的作用域设置为singleton, 那么Spring IOC容器中只会存在一个共享的bean实例,并且所有对bean的请求,只要id与该bean定义相匹配,则只会返回bean的同一实例。

    其它区别

         1.封装请求参数:Struts1中强制使用ActionForm对象封装请求的参数。Struts2可以选择使用POJO类来封装请求的参数,或者直接使用Action的属性。

    struts1不可以进行注入,而struts2可以给action属性注入值
         2.表达式语言方面:Struts1中整合了EL,但是EL对集合和索引的支持不强,Struts2整合了OGNL(Object Graph Notation Language)

         3.绑定值到视图技术:Struts1使用标准的JSP,Struts使用“ValueStack”技术。

    struts2提供的标签可以直接从值栈里面取数据。
         4.数据校验:Struts1中支持覆盖validate方法或者使用Validator框架。Struts2支持重写validate方法或者使用XWork的验证框架。
         5.Struts 1要求Action类继承一个抽象基类;

          Struts 1的一个具体问题是使用抽象类编程而不是接口。Struts 2 Action类可以实现一个Action接口,也可以实现其他接口,使可选和定制的服务成为可能。Struts 2提供一个ActionSupport基类去实现常用的接口。即使Action接口不是必须实现的,只有一个包含execute方法的POJO类都可以用作Struts 2的Action。

    保持核心竞争力

          struts2也具有IOC功能,例如我们常用的框架ibatis、herbirnate等,最早它们有很多功能是同spring重叠的,慢慢认识到一个框架不可以能放之四海而皆准都有自己的特点和核心功能,因此,它们逐渐放弃了部分功能。

         

          Struts2是以Webwork 2作为基础发展出来。而在Webwork 2.2之前的Webwork版本,其自身有一套控制反转的实现,Webwork 2.2在Spring 框架的如火如荼发展的背景下,决定放弃控制反转功能的开发,转由Spring实现。

          值得一提的是,Spring确实是一个值得学习的框架,因为有越来越多的开源组件(如iBATIS等)都放弃与Spring重叠的功能的开发。因此,Struts2推荐大家通过Spring实现控制反转。

          

    总结;

          最近又复习了一下ssh的东西,有些需要经常使用和实践才会理解的更深刻。

  • 相关阅读:
    新浪JavaScript库
    Java中创建的对象多了,必然影响内存和性能
    Fidder抓包设置
    JavaScript处理股票数据
    按钮控制示例
    JavaScript更改css样式
    AppCan模拟器调试
    AppCan调试问题
    Java虚拟机JVM学习04 类的初始化
    COM组件和调用详细教程
  • 原文地址:https://www.cnblogs.com/lilongsheng1125/p/4978509.html
Copyright © 2011-2022 走看看