Struts2和Struts1的不同

转载(没看懂)

Action 类

  ◆Struts1要求Action类继承一个抽象基类org.apache.struts.action.Action。Struts1的一个普遍问题是使用抽象类编程而不是接口。

  ◆Struts 2 Action类可以实现一个Action接口,也可实现其他接口,使可选和定制的服务成为可能。Struts2提供一个ActionSupport基类去实现 常用的接口。Action接口不是必须的,任何有execute标识的POJO对象都可以用作Struts2的Action对象。

线程模式

  ◆Struts1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts1 Action能做的事,并且要在开发时特别小心。Action资源必须是线程安全的或同步的。

  ◆Struts2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。(实际上,servlet容器给每个请求产生许多可丢弃的对象,并且不会导致性能和垃圾回收问题)

 

Servlet 依赖

  ◆Struts1 Action 依赖于Servlet API ,因为当一个Action被调用时HttpServletRequest和HttpServletResponse 被传递给execute方法。

  ◆Struts 2 Action不依赖于容器,允许Action脱离容器单独被测试。如果需要,Struts2 Action仍然可以访问初始的request和response。但是,其他的元素减少或者消除了直接访问HttpServetRequest 和 HttpServletResponse的必要性 (HttpServletRequest) ActionContext.getContext().get(StrutsStatics.HTTP_REQUEST)。

可测性

  ◆测试Struts1 Action的一个主要问题是execute方法暴露了servlet API(这使得测试要依赖于容器)。一个第三方扩展--Struts TestCase--提供了一套Struts1的模拟对象(来进行测试)。

  ◆Struts 2 Action可以通过初始化、设置属性、调用方法来测试,“依赖注入”支持也使测试更容易。

捕获输入

  ◆Struts1 使用ActionForm对象捕获输入。所有的ActionForm必须继承一个基类org.apache.struts.action.ActionForm。因为其他JavaBean不能用作ActionForm,开发者经常创建多余的类捕获输入。动态Bean(DynaBeans)可以作为创建传统ActionForm的选择,但是,开发者可能是在重新描述(创建)已经存在的JavaBean(仍然会导致有冗余的javabean)。

  ◆ Struts 2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。输入属性可能是有自己(子)属性的rich对象类型。Action属性能够通过web页面上的taglibs访问。Struts2也支持ActionForm模式。rich对象类型,包括业务对象,能够用作输入/输出对象。这种ModelDriven 特性简化了taglib对POJO输入对象的引用。

表达式语言

  ◆Struts1 整合了JSTL,因此使用JSTL EL。这种EL有基本对象图遍历,但是对集合和索引属性的支持很弱。

  ◆Struts2可以使用JSTL,但是也支持一个更强大和灵活的表达式语言--"Object-Graph Navigation Language" (OGNL对象图导航语言).

  绑定值到页面(view):

  ◆ Struts 1使用标准JSP机制把对象绑定到页面中来访问。

  ◆Struts 2 使用 "ValueStack"技术,使taglib能够访问值而不需要把你的页面(view)和对象绑定起来。ValueStack策略允许通过一系列名称相同但类型不同的属性重用页面(view)。

类型转换

  ◆Struts 1 ActionForm 属性通常都是String类型。Struts1使用Commons-Beanutils进行类型转换。每个类一个转换器,对每一个实例来说是不可配置的。

  ◆Struts2 使用OGNL进行类型转换。提供基本和常用对象的转换器。

校验

  ◆Struts 1支持在ActionForm的validate方法中手动校验,或者通过Commons Validator的扩展来校验。同一个类可以有不同的校验内容,但不能校验子对象。

  ◆Struts2支持通过validate方法和XWork校验框架来进行校验。XWork校验框架使用为属性类类型定义的校验和内容校验,来支持chain校验子属性

Action执行的控制

  ◆Struts1支持每一个模块有单独的Request Processors(生命周期),但是模块中的所有Action必须共享相同的生命周期。

  ◆Struts2支持通过拦截器堆栈(Interceptor Stacks)为每一个Action创建不同的生命周期。堆栈能够根据需要和不同的Action一起使用。

转载于:https://www.cnblogs.com/sara-gcj/p/3307463.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/294978.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

拉屎能赚钱?在马桶上月入过万?原来卫生间里还有这么多隐藏福利,超模君都惊了……

全世界只有3.14 % 的人关注了爆炸吧知识模友们,你们有过“带薪拉屎”的经历吗?没错,假如我们每天花10分钟“带薪拉屎”,那一年大概能积攒下来40小时,假如我们每天工作8小时,等于多了5天年假,白嫖…

Android之让图片匀速旋转效果

图片匀速旋转 当我们更新的时候,需要把更新小图标旋转起来,不废话,先爆照 介绍动画: Android 平台提供了两类动画,一类是 Tween 动画,即通过对场景里的对象不断做图像变换(平移、缩放、旋转)产生动画效果;第二类是 Frame 动画,即顺序播放事先…

C语言计算一个数的平方根立方根,怎样快速计算出一个数的平方根立方根?

我定义a^bab(10a b)^2 100a^2 20ab b^2 100a^2 b(20a b)a代表已经计算结b代表前需要计算位数每计算程100a^2都减掉剩b(20a b)需要做找整数b使b(20a b)>b,(10*a b)^n-(10*a)^n≈n*(10*a)^(n-1)*b,即:b≈41221398234/n/(10*a)^(n-1)41221398234/5/180^4≈7。85,取b7各步都更…

百度语言翻译机

百度语言翻译机 2006 年百度之星程序设计大赛初赛题目 6 百度语言翻译机 时限 1s 百度的工程师们是非常注重效率的,在长期的开发与测试过程中,他们逐渐创造了一套他们独特的缩率语。他们在平时的交谈,会议,甚至在各中技术文档中都…

Android之如何使用快速联系徽章

翻译地址:http://code.tutsplus.com/tutorials/android-quick-tip-using-the-quick-contact-badge--mobile-2245 如果你花任何时间在一个Android设备,您可能已经注意到你可以点击小图片联系如何启动一个工具栏与很多不同的行为,如电话、短信、邮件的人。 在这个快速提示,您…

dotnet 使用 Infer# 自动分析代码缺陷

本文告诉大家如何使用 Infer# 开源库配合 GitHub 的 Action 实现自动分析代码缺陷,如找到可空引用或线程安全等问题这是一个在 GitHub 上完全开源的仓库,请看 https://github.com/microsoft/infersharp刚好今天收到了 Infer# 发布 1.2 版本博客&#xff…

发了篇paper,双非二本的她直博浙大

全世界只有3.14 % 的人关注了爆炸吧知识大家好,我是小南,本科就读于国内某双非二本院校,于2019年拿到了浙江大学的直博录取函。很多人问我从二本院校成功跨越到国内知名高校的秘诀是什么,我个人觉得,除开运气&#xff…

FZU 2095 水面高度

一共六种情况。手算即可。 #include<cstdio> #include<cstring> #include<cmath>int T; double a,b,c,d,x; double ans;int main() {scanf("%d",&T);while(T--){scanf("%lf%lf%lf%lf%lf",&a,&b,&c,&d,&x);doubl…

android+清除循环动画,android - 如何使用ViewPropertyAnimator生成循环动画?

我想构建一个TextViews动画&#xff0c;在完成后会自动重复。对于我要设置动画的每个View&#xff0c;我使用以下代码final float oldX v.getX();final float newX v.getX() - (float)totalWidth;final AnimatorListenerAdapter listener new AnimatorListenerAdapter() {Ov…

(转)matlab各类数学公式

matlab矩阵应用clear%建立矩阵的两种方式A1 [1 2 3 4 5; 6 7 8 9 10];A2 [ 1 2 3 4 5 6 7 8 9 10 ];%一种是换行用引号&#xff0c;一种是自然写法 clearA [5 4 3 2 1; 6 7 8 9 10;1 2 3 4 5;24 24 24 24 24;25 25 25 25 25];B [5 4 3 2 1; 6 7 8 9 10;…

PS网页设计教程XVI——在PS中创建一个摩登实验室风格的网页设计

作为编码者&#xff0c;美工基础是偏弱的。我们可以参考一些成熟的网页PS教程&#xff0c;提高自身的设计能力。套用一句话&#xff0c;“熟读唐诗三百首&#xff0c;不会作诗也会吟”。 本系列的教程来源于网上的PS教程&#xff0c;都是国外的&#xff0c;全英文的。本人尝试翻…

好评率超高的9个公众号,值得收藏

不管世界变化多快&#xff0c;阅读仍是个不过时的动作。今天就为大家推荐几个优质公众号&#xff0c;从社会热点、读书成长、生活新知&#xff0c;你的碎片化时间&#xff0c;我们包了&#xff01;一起来看看呀~长按二维码&#xff0c;“识别图中二维码”即可订阅————电商头…

.NET 6新特性试用 | 文件范围的命名空间

前言在前面的《隐式using指令》文章中&#xff0c;我们介绍了global using&#xff0c;可以减少我们代码文件中的“噪音”&#xff0c;使代码更简洁。今天&#xff0c;我们介绍.NET 6中另一个简化代码的方式——文件范围的命名空间。Demo当我们向项目中添加一个类文件时&#x…

php的几种运行模式CLI、CGI、FastCGI、mod_php

1、CLI:就是命令行&#xff0c;例如可以在控制台或者是shell中键入命令: php -f index.php 然后获取输出 2、CGI:以下是不同的说法与理解 公共网关接口”(Common Gateway Interface)&#xff0c;HTTP服务器 与你的或其它机器上的程序 进行 “交谈”的一种工具 &#xff0c;其程…

Android之三大图片缓存原理、特性对比

一. 四大图片缓存基本信息 Universal ImageLoader 是很早开源的图片缓存&#xff0c;在早期被很多应用使用。Picasso 是 Square 开源的项目&#xff0c;且他的主导者是 JakeWharton&#xff0c;所以广为人知。Glide 是 Google 员工的开源项目&#xff0c;被一些 Google App 使用…

android宿舍管理系统源码,基于android操作系统的手机宿舍管理系统使用手册

《基于android操作系统的手机宿舍管理系统使用手册》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《基于android操作系统的手机宿舍管理系统使用手册(5页珍藏版)》请在人人文库网上搜索。1、基于an droid操作系统的手机宿舍管理系统使用手册 1 系统概述 本系统是在an…

产品需求文档 PRD

第一轮&#xff1a; 1&#xff0c;文档使用方&#xff1a;UI设计师 2、内容&#xff1a; 根据战略层定义出来产品功能范围&#xff0c; 说明此产品的目的&#xff0c;方便UI设计人员更好的理解产品 产品基本流程 详细的设计框架图&#xff0c;推荐用ax…

他读博期间连发3篇Science,28岁任武大教授后再发Nature!

全世界只有3.14 % 的人关注了爆炸吧知识来源&#xff1a;募格课堂整合自武汉大学、武汉晚报、半月谈等有这样一位学者&#xff0c;读博期间以一作身份发表3篇Science,28岁成为武汉大学化学与分子科学学院教授再发2篇Nature&#xff0c;35岁荣获杰青......今年9月&#xff0c;他…

如何限制并发的 异步IO 请求数量?

咨询区 Grief Coder&#xff1a;我的项目中有下面一段代码&#xff1a;// lets say there is a list of 1000 URLs string[] urls { "http://google.com", "http://yahoo.com", ... };// now lets send HTTP requests to each of these URLs in parallel …

Android之自定义 ActionBar 上的菜单(Menu)文字颜色

本文记录了修改 ActionBar 上 Menu 字体颜色的方法。第一种通过自定义主题实现&#xff0c;第二种通过复写onCreateOptionsMenu实现。 自定义Theme 修改MenuItem 文字颜色 自定义 ActionBar 上的菜单文字颜色需要通过 Activity 的 Theme 实现&#xff0c;而非 ActionBar 的 The…