一、概述


Struts1以ActionServlet作为核心控制器,由ActionServlet负责拦截用户的全部请求。Struts1框架有3个重要组成部分:Action、ActionForm和ActionForward对象。

ActionForm必须实现ActionForm的基类,设计上并非真正的POJO

ActionForward就是一个逻辑视图,通过在配置文件里定义ActionFoward的映射,完毕逻辑视图名和实际视图资源之间的映射


Struts2核心控制器:FilterDispatcher。它事实上并非一个陌生的Web框架,Struts2是以Webwork的设计思想为核心。吸收了Struts1的长处,因此。能够觉得Struts2是Struts1和Webwork结合的产物。

由此可见Struts1和Struts2有着藕断丝连的关系,先从断说起,Struts2并非Struts1的升级。它在实现原理和编程应用上与Struts1都全然不同。能够说彻底抛弃了Struts1的框架。何为连?尽管WebWork在设计上确实要比struts1先进,但因为用户习惯问题。所以非常难被普及,仅仅有挂羊头卖狗肉才会被市场逐步接受,基于这些原因。WebWork开发团队与Struts1开发团队開始合作。借struts1之名。行WebWork之实,推出了Struts2。

通过以上对二者的简单了解,主要从下面10点来说明他们之间有什么差别:

二、对照

特征

Struts 1

Struts 2

Action类

Struts1的action须要去继承一个抽象基类。一个普遍问题就是Struts1是面向抽象类编程来取代接口编程

Struts2的action能够实现一个Action接口,也能够同一时候实现一些其它的接口来添置一些附加的,经常使用的服务。Struts2提供一个基类ActionSupport实现了一些经常使用的接口。尽管Action接口不是必须的。不论什么附带execute方法的POJO对象都能够作为Struts2的action对象。

线程模型

Struts1的action是单例的并且必须是线程安全的。由于该类会仅仅有唯一一个引用来为action处理全部的请求。单例策略会限制Struts1的action的功能以及须要扩展的额外的功能(The singleton strategy places restrictions on what can be done with
Struts 1 Actions and requires extra care to develop)。

Struts1的action必须是线程安全的而且是同步的。

Struts2的Action对象是针对每个请求的,所以自然也就不存在线程安全问题了。

(实践中。servlet容器给每个请求产生很多丟弃的对象,而且不会导致性能和垃圾回收问题)

Servlet的依赖

Struts1的Action依赖于Servlet API,由于当Action被调用的时候HttpServletRequest和HttpServletResponse对象是通过execute方法进行处理的。

Struts2的Action和容器的连接并不紧密。通常servlet上下文被描绘成简单的Map映射。同意Action被单独測试。当然,假设须要的话Struts2的Action也能够通过訪问初始的request和response来完毕一些功能。

然而,其它的一些架构元素导致减少或者删除了直接訪问request和response的需求。

易測试性

測试Struts1的Action有一个大障碍就是execute方法是直接暴露于servlet API的。

Struts2的Action能够非常easy的通过设置属性调用方法来进行測试。

当然依赖注入的支持也使得測试变得简单。

输入处理

Struts1使用一个ActionForm对象来获取用户的输入。和action一样。全部的ActionForm都必须继承自一个基类。由于其它的javaBean不能被用作ActionForm,开发人员通常要写一些多余的类来获取用户输入。

DynaBean能够被用做生成ActionForm类的一个选择,可是开发人员须要对现有的javaBean进行重写。

Struts2使用Action属性作为输入属性,除掉了对于输入对象的需求。

输入属性能够是一个拥有他自己的属性的对象。

Action属性是通过标签和web页面交互。Struts2也支持ActionForm模型,就是POJO的Form对象和POJO的Action。

多数的对象类型。包含商业逻辑对象和领域对象都能够作为输入/输入对象。模式驱动特征简化了标签和POJO输入对象的关系。

表达式语言

Struts1和JSTL结合,所以他能够使用JSTL的EL。

Struts2也支持JSTL,可是这个框架也支持更加强大的表达式语言OGNL.

表现层和类型值的绑定

Struts1使用标准的JSP机制将对象绑定到page context来进行訪问。

Struts2使用”ValueStack”技术,所以标签不用将视图和表现的对象结合就能够得到值.ValueStack策略同意通过一系列可能具有同样属性名字可是不同属性类型的的类型来完毕视图的重用,

类型转换

Struts1的ActionForm通常都是String类型。Struts1通过Commons-Beanutils实现类型转换。

Struts2使用OGNL实现类型转换,框架包括了对基础和公共类型的转换器。

验证

Struts1支持通过ActionForm中的validate方法实现手工验证。也能够通过扩展通用的验证框架进行验证。对于同一个类能够有不同的验证。可是不能关联到子对象的验证。

Struts2也支持通过validate方法进行手工验证以及Xwork验证框架进行验证。Xwork验证框架支持将验证链接到子属性,子属性使用了为属性类型和验证上下文定义的验证。

Action运行的控制

Struts1支持为每个模块分配请求处理(生命周期)。可是一个模块中的全部Action必须分享同样的生命周期。

Struts2支持通过拦截器栈为每一个Action创建不同的生命周期。通常对于不同的Action依据须要都要有相应的栈被创建和使用。

三、总结

通过以上对Struts1和Struts2的对照。让我们更明白了它们各自的优缺点。非常显然Struts2是站在前辈的基础上设计出来。它会改善和完好Struts1中的一些缺陷,Struts1中的一些悬而未决问题在Struts2得到了解决。可是struts1是老牌框架,应用非常广泛。有非常好的群众基础,开发者比較好招。项目开发的风险小,成本更低。所以两者的选用视情况而定。

Struts1与Struts2的那些事的更多相关文章

  1. Struts1与Struts2的12点区别

    Struts1与Struts2的12点区别  1) 在Action实现类方面的对比:Struts 1要求Action类继承一个抽象基类:Struts 1的一个具体问题是使用抽象类编程而不是接口.Str ...

  2. struts1 和 struts2中Action什么时候实例化

    精帖1:http://blog.csdn.net/lfsf802/article/details/7277013 精帖1:http://blog.csdn.net/wmj2003/article/de ...

  3. struts1,struts2,springMVC终极对比

    最近做项目用到了struts2,之前一直是用struts1和springMVC.感觉到了struts2从很大程度上和这两个还是有很大区别的,所以今天搜集了些资料,给他们做一下对比. Struts1官方 ...

  4. struts1与struts2的区别

    Struts2其实并不是一个陌生的Web框架,Struts2是以Webwork的设计思想为核心,吸收了Struts1的优点,因此,可以认为Struts2是Struts1和Webwork结合的产物. 简 ...

  5. Struts1和Struts2的区别和对比(完整版)

    Struts2其实并不是一个陌生的Web框架,Struts2是以Webwork的设计思想为核心,吸收了Struts1的优点,因此,可以认为Struts2是Struts1和Webwork结合的产物. 简 ...

  6. Struts2五、Struts1与Struts2的区别

    Struts1和Struts2的区别和对比: Action 类:  • Struts1要求Action类继承一个抽象基类.Struts1的一个普遍问题是使用抽象类编程而不是接口,而struts2的Ac ...

  7. Struts1和Struts2的区别和对比

    Struts1和Struts2的区别和对比: Action 类: • Struts1要求Action类继承一个抽象基类.Struts1的一个普遍问题是使用抽象类编程而不是接口. • Struts 2  ...

  8. struts1和struts2之间的区别

    从action类上分析:1.Struts1要求Action类继承一个抽象基类.Struts1的一个普遍问题是使用抽象类编程而不是接口. 2. Struts 2 Action类可以实现一个Action接 ...

  9. struts1与struts2的差别

     Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架.其全新的Struts 2的体系结构与Struts 1的体系结 ...

随机推荐

  1. Swift3.0:Get/Post同步和异步请求

    一.介绍 Get和Post区别: Get是从服务器上获取数据,Post是向服务器发送数据. 对于Get方式,服务端用Request.QueryString获取变量的值,对于Post方式,服务端用Req ...

  2. Android Animatioin总结

    一.动画分类 1.  View Animation (Tween动画)  执行一系列简单的转换.      针对 视图对象内容进行移动,放大,缩小以及产生透明度的变化等四种动画操作.仅针对视图对象内容 ...

  3. CSS-设置Footer始终在页面底部

    Footer顾名思义页脚,如果内容多的时候在底部时感官很好,但是当内容变少(无法撑开一屏的时候)footer不固定在底部,影响美观,对于已经从事前端工作的工作的来说应该是比价工作中入门级别的问题了,由 ...

  4. First Missing Positive leetcode java

    题目: Given an unsorted integer array, find the first missing positive integer. For example, Given [1, ...

  5. 文件 File 常见操作 工具 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  6. Python3爬虫:利用Fidder抓取手机APP的数据

    1.什么是Fiddler? Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的“进出”Fiddler的数据(指cookie,ht ...

  7. Magento错误 Illegal scheme supplied, only alphanumeric characters are permitted

    1.检查表core_config_data 'web/unsecure/base_url' 和'web/secure/base_url' 的值是否是正确的链接地址 2.删除系统目录var下所有子目录及 ...

  8. 如何在 Kaggle 首战中进入前 10%

    原文:https://dnc1994.com/2016/04/rank-10-percent-in-first-kaggle-competition/ Introduction Kaggle 是目前最 ...

  9. Tushare数据的绘图操作

    1.在代码里调试学习实在费劲,可以把数据取到df里,在交互界面里慢慢调试 2.柱状图 绘制柱状图,默认情况下乱,数据太密了 改用曲线图

  10. Log4j中conversionPattern的含义

    %a -- 表示礼拜几,英文缩写形式,比如“Fri”%A -- 表示礼拜几,比如“Friday”%b -- 表示几月份,英文缩写形式,比如“Oct”%B -- 表示几月份,“October”%c -- ...