永发信息网

struts1和struts2的区别??

答案:5  悬赏:50  手机版
解决时间 2021-02-23 17:15
  • 提问者网友:無理詩人
  • 2021-02-23 12:58
struts1和struts2的区别??
最佳答案
  • 五星知识达人网友:七十二街
  • 2021-02-23 14:34
struts1和struts2的区别其实并不是太大,两者的区别:
Action 类:
◆Struts1要求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的必要性。
可测性:
◆测试Struts1 Action的一个主要问题是execute方法暴露了servlet API(这使得测试要依赖于容器)。一个第三方扩展--Struts TestCase--提供了一套Struts1的模拟对象(来进行测试)。
◆Struts 2 Action可以通过初始化、设置属性、调用方法来测试,“依赖注入”支持也使测试更容易。
捕获输入:
◆Struts1 使用ActionForm对象捕获输入。所有的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 Notation 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一起使用。
全部回答
  • 1楼网友:夜风逐马
  • 2021-02-23 18:08
1、配置文件格式不同 2、struts1有from类和action类,属性封装from类里,在struts2里只有action类,属性封装action类里 3、页面调用是struts1是*.dostruts2是*.action 我认为struts2要比struts1,简单、方便、快捷。就是用着比struts1好 以上是我开发的体会,下面是我找的资料 主要表现在如下几个方面:   在action的实现方面:struts1要求必须统一扩展自action类,而struts2中可以是一个普通的pojo。   线程模型方面:struts1的action工作在单例模式,一个action的实例处理所有的请求。struts2的action是一个请求对应一个实例。没有线程安全方面的问题。   servlet依赖方面:struts1的action依赖于servletapi,比如action的execute方法的参数就包括request和response对象。这使程序难于测试。struts2中的action不再依赖于servletapi,有利于测试,并且实现tdd。   封装请求参数:struts1中强制使用actionform对象封装请求的参数。struts2可以选择使用pojo类来封装请求的参数,或者直接使用action的属性。   表达式语言方面:struts1中整合了el,但是el对集合和索引的支持不强,struts2整合了ognl(objectgraphnavigationlanguage)。   绑定值到视图技术:struts1使用标准的jsp,struts2使用“valuestack”技术。   类型转换:struts1中的actionform基本使用string类型的属性。struts2中使用ognl进行转换,可以更方便的使用。   数据校验:struts1中支持覆盖validate方法或者使用validator框架。struts2支持重写validate方法或者使用xwork的验证框架。   action执行控制的对比:struts1支持每一个模块对应一个请求处理,但是模块中的所有action必须共享相同的生命周期。struts2支持通过拦截器堆栈为每一个action创建不同的生命周期。
  • 2楼网友:行雁书
  • 2021-02-23 16:56
strut1.x是基于servlet的,其实质上还是对servlet进行的封装。 struts2两个完全是不同的框架。 struts2是线程安全的。 从目前我对struts2的理解来看,扩展性更好些。基本上可以不依赖servlet容器来进行web项目开发。这样开发方式更灵活,而不用像struts1那样 写各种servlet了。 并且struts2引入了IOC的思想,对于Modeldriven方式开发更加方便。 以上是我对struts2的理解。
  • 3楼网友:夜余生
  • 2021-02-23 16:36
2楼明显是贴过来的信息嘛! 首先,S1和S2都是很优秀的MVC框架,而且不过他们的主攻点是不同的,虽然说他们目的是相同的,不过二者是基于不同的框架或者是完全两种新的设计理念! 具体的!我也说不清楚!你可以看看2楼的!
  • 4楼网友:摆渡翁
  • 2021-02-23 16:02
/**Action类 Struts1要求Action类继承一个抽象类,Struts1使用抽象类编程而不是接口 Struts2可以实现Action接口也可以不实现,Struts2提供一个ActionSuport基类去实现常用接口。Action接口不是必须的,任何有execute的标识的 POJO都有可能成为struts2的Action的对象 /**线程模式 Struts1的Action是单例模式并且是线程安全的,仅有Action一个实例来处理所有请求。单策略模式限制了Struts1 Action能做的事。比且在开发时要 注意Action资源必须是线程安全比且是同步的。 Struts2的Action对象为每个请求产生一个实例,因此没有线程安全问题。 /**Servlet依赖 Struts1 Action依赖与Servlet API,因为当一个Action被调用时HttpServletRequest和HttpServletResponse被传递给execute方法。 Struts2 Action不依赖与容器,允许Action脱离容器被单独测试。如果需要,struts2依然可以访问初始的request和response。但是,其他的元素减 少或者消除了直接访问HttpServletRequest和HttpServletResponse的必要性。 /**可测性: 测试Struts1 Action的一个主要问题是execute方法暴漏了Servlet API(这使得测试要依赖于容器)。一个第三方扩展--Struts TestCase--提供了一套Struts1的模拟对象(来进行测试) struts2 Action可以通过初始化、设置属性、调用方法来测试,“依赖注入”支持也使测试更容易。 /**捕获输入: struts1使用ActionForm对象捕获输入。所有ActionForm必须继承一个基类。因为其他JavaBean不能用作ActionForm,开发者经常创建多余的基类不或输入。动态Bean(DynaBeans)可以作为创建传统ActionForm的选择,但是,开发者可能是在重新描述(创建)已经存在的JavaBean(仍然会导致有沉余的JavaBean)。 Struts2直接使用Acrtion属性作为输入属性,消除了对第二个输入对象的请求。输入属性可能是有自己(子)属性的Rich对象类型。Action属性能过通过web页面上的Taglibs访问。struts2也支持ActionForm模式。Richard对象类型,包括业务对象,能够用作输入/输出对象。这种ModelDriven特性简化了Taglib对POJO输入对象的引用。 /**表达式语言 Struts1整合了JSTL,因此使用JSTL EL。这种EL有基本对象图遍历,但是对集合和索引属性的支持很脆弱。 Struts2可以使用JSTL,但是也支持一个更强大和灵活的表达式语言--“object graph Notation Language”(OGNL) /**绑定值到页面(view) Struts1使用标准JSP机制吧对象绑定到页面中来访问。 struts2使用ValueStack技术,使taglib能够访问值而不需要把你的页面(view)和对象绑定起来。ValueStack策略允许通过一系列名称相同但类型不同的属性重同页面(view) /**类型转换 Struts1 ActionForm属性通常都是String类型。struts1使用Commons-Beanutils进行类型转换。每个类一个转换器,对每一个实例来说是不可配置的 struts2 使用OGNL进行类型转换,提供基本和常用对象的转换器。 /**效验 Struts1支持在ActionForm的validate方法中手动效验,或者通过Commons Validator的扩展来效验。同一个类可以有不同的效验内容,但不能效验子对象。 Struts2支持通过validate方法和XWork效验框架进行效验。XWork效验框架使用为属性类类型定义的效验和内容效验,来支持Chain效验子属性。 /**Action执行的控制 Struts1支持每一个模块有单独的Request Processors(生命周期),但是模块中的所有Action必须共享相同的生命周期。 struts2支持通过拦截器堆栈(Interceptor Stacks)为每一个Action创建不能的生命周期。堆栈能够根据需要和不同的Action一起使用。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯