1.Action类
Struts1要求Action类继承一个抽象类,Struts1使用抽象类编程而不是接口
Struts2可以实现Action接口也可以不实现,Struts2提供一个ActionSuport基类去实现常用接口。Action接口不是必须的,任何有execute的标识的POJO都有可能成为struts2的Action的对象
2.线程模式
Struts1的Action是单例模式并且是线程不安全的,仅有Action一个实例来处理所有请求。单例略模式限制了Struts1 Action能做的事。比且在开发时要注意Action资源必须是线程安全比且是同步的。
Struts2的Action对象为每个请求产生一个实例,因此没有线程安全问题。
3.Servlet依赖
Struts1 Action依赖与Servlet API,因为当一个Action被调用时HttpServletRequest和HttpServletResponse被传递给execute方法。
Struts2 Action不依赖与容器,允许Action脱离容器被单独测试。如果需要,struts2依然可 以访问初始的request和response。但是,其他的元素减少或者消除了直接访问 HttpServletRequest和HttpServletResponse的必要性。
4.可测性:
测试Struts1 Action的一个主要问题是execute方法暴漏了Servlet API(这使得测试要依赖于容器)。一个第三方扩展--Struts TestCase--提供了一套Struts1的模拟对象(来进行测试)
struts2 Action可以通过初始化、设置属性、调用方法来测试,“依赖注入”支持也使测试更容易。
5.捕获输入:
struts1使用ActionForm对象捕获输入。所有ActionForm必须继承一个基类。因为其他JavaBean不能用作ActionForm,开发者经常创建多余的基类不或输入。动态Bean(DynaBeans)可以作为创建传统ActionForm的选择,但是,开发者可能是在重新描述(创建)已经存在的JavaBean(仍然会导致有沉余的JavaBean)。
Struts2直接使用Acrtion属性作为输入属性,消除了对第二个输入对象的请求。输入属性可能是有自己(子)属性的Rich对象类型。Action属性能过通过web页面上的Taglibs访问。struts2也支持ActionForm模式。Richard对象类型,包括业务对象,能够用作输入/输出对象。这种ModelDriven特性简化了Taglib对POJO输入对象的引用。
6.表达式语言
Struts1整合了JSTL,因此使用JSTL EL。这种EL有基本对象图遍历,但是对集合和索引属性的支持很脆弱。
Struts2可以使用JSTL,但是也支持一个更强大和灵活的表达式语言--“Object-Graph Navigation Language”(OGNL)
7.绑定值到页面(view)
Struts1使用标准JSP机制把对象绑定到页面中来访问。
struts2使用ValueStack技术,使taglib能够访问值而不需要把你的页面(view)和对象绑定起来。ValueStack策略允许通过一系列名称相同但类型不同的属性重同页面(view)
8.类型转换
Struts1 ActionForm属性通常都是String类型。struts1使用Commons-Beanutils进行类型转换。每个类一个转换器,对每一个实例来说是不可配置的
struts2 使用OGNL进行类型转换,提供基本和常用对象的转换器。
9.校验
Struts1支持在ActionForm的validate方法中手动校验,或者通过Commons Validator的扩展来校验。同一个类可以有不同的校验内容,但不能校验子对象。
Struts2支持通过validate方法和XWork校验框架进行效验。XWork校验框架使用为属性类类型定义的校验和内容校验,来支持Chain校验子属性。
10.Action执行的控制
Struts1支持每一个模块有单独的Request Processors(生命周期),但是模块中的所有Action必须共享相同的生命周期。
struts2支持通过拦截器堆栈(Interceptor Stacks)为每一个Action创建不同的生命周期。堆栈能够根据需要和不同的Action一起使用。
分享到:
相关推荐
面试题1:用一笔画出经过9个点的4条直线 面试题2:在9个点上画10条线 面试题3:100盏灯 面试题4:找出不同的球 面试题5:时针、分针和秒针重合问题 面试题6:可以喝多少瓶汽水 面试题7:怎样拿到第100号球 面试题8:...
**题目描述:** 一个人只说真话或者只说谎话,他告诉你旁边的人非常诚实,问你应该相信谁? **解析:** 这个问题涉及逻辑推理。如果第一个人是诚实的,他会如实告诉你旁边的人是诚实的;但如果第一个人是骗子,他也...
经过几轮问答后,学生甲和乙均猜出了这两个数字。求这两个数字。 **解答**: 数字为3和4。通过逻辑推理和数学验证,可以确定这是唯一可能的答案。甲在得知数字之和后无法确定数字,说明和不是唯一的组合方式;乙在...
根据给定文件的信息,我们可以提炼出与微软面试题目相关的几个知识点。尽管提供的部分内容难以理解,但结合标题和描述,我们可以合理推测并展开讨论。 ### 微软面试题选 #### 知识点一:逻辑推理题 这类题目通常...
现在你手中有一根21厘米长的金条,但是你只能切两次,请问如何支付这名工人的工资? **解答思路**: 为了解决这个问题,我们需要将这根21厘米长的金条切成三段,每段长度分别为3厘米(7分之一)、6厘米(7分之二)...
解答:你可以向两人中的任意一人提出这样的问题:“如果我问另一个人这条路通向哪里,他会说什么?”如果被问者来自诚实国,他会诚实地告诉你另一个人会撒谎指错路;如果被问者来自说谎国,他也会撒谎说另一个人会指...
问题描述:如何在仅两次称重的情况下,从八个球中找出那个较轻的破损球? 解析:这是一个经典的逻辑推理问题。解决方法涉及将球分为三组,通过两次称重来逐步缩小范围。第一次称重可以将球分为三组:两组各三个球,...
给你一个天平,而且只准称两次,如何找出重量不同的那个球? **职位:** 产品经理 **解析:** 此题考查应聘者的逻辑推理能力和解决问题的能力。 1. **分组策略:** 将球分为三组,每组分别为3个、3个、2个。 2. *...
55、设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。 36 56、子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次,请写出程序...
为了确保拿到两个相同颜色的果冻,最坏的情况是前两次抽取不同颜色的果冻,第三次无论抽到哪种颜色都可以保证有两个相同颜色的果冻。因此,最少需要抽取3个果冻。 **10. 水量测量问题** - **解析**:此题需要巧妙...
在国王给所有人都戴上黑色帽子的情况下,其中一个囚犯通过推理得知自己的帽子颜色。问题是他是如何推理出这个结论的? **解决方案**: - 假设A、B、C三人被戴上帽子。 - A可以看到B和C的帽子颜色。如果B和C都戴的是...
题目描述:如果需要在7天内每天给工人一段金条作为报酬,且只能断裂金条两次,如何分配? 解答思路:将金条分割成适合每天支付的段落。 解决方案:可以将金条分成长度比例为1/7、2/7和4/7的三段,这样可以保证每天...
55、设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。 36 56、子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次,请写出程序...
4. 如果这两个球的重量相同,则被找的球是未被称量的那个;如果不同,则重量不同的球就是那个被找的球。 5. 如果是13个球,则按照上述方法处理前12个球。若三次均未找到不同重量的球,则第13个球即为不同重量的球。 ...
- **问题描述**:在12个球中有一个重量与其他不同,如何用天平三次称量找出这个球?如果是13个球呢? - **解析**: - 将球分为四组(3个、3个、3个、3个或3个、3个、3个、4个),第一次称量两组3个球,如果平衡则...
一个经理有三个女儿,三个女儿的年龄加起来等于 13,三个女儿的年龄乘起来等于经理自己的年龄,有一个下属已知道经理的年龄,但仍不能确定经理三个女儿的年龄,这时经理说只有一个女儿的头发是黑的,然后这个下属就...
- 要在两次切割后每天都能给出一段金条,可以将金条分割为1/7、2/7和4/7三段。这样第一天给1/7,第二天收回并给2/7,第三天收回1/7并给3/7,以此类推,直到第七天全部给出。 4. **小鸟飞行距离计算** - 此题涉及...