问题描述
如题
解决方案
解决方案二:
—在Action实现类方面的对比:Struts1要求Action类继承一个抽象基类;Struts1的一个具体问题是使用抽象类编程而不是接口。Struts2Action类可以实现一个Action接口,也可以实现其他接口,使可选和定制的服务成为可能。Struts2提供一个ActionSupport基类去实现常用的接口。即使Action接口不是必须实现的,只有一个包含execute方法的POJO类都可以用作Struts2的Action。—线程模式方面的对比:Struts1Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts1Action能做的事,并且要在开发时特别小心。Action资源必须是线程安全的或同步的;Struts2Action对象为每一个请求产生一个实例,因此没有线程安全问题。—Servlet依赖方面的对比:Struts1Action依赖于ServletAPI,因为Struts1Action的execute方法中有HttpServletRequest和HttpServletResponse方法。Struts2Action不再依赖于ServletAPI,从而允许Action脱离Web容器运行,从而降低了测试Action的难度。当然,如果Action需要直接访问HttpServletRequest和HttpServletResponse参数,Struts2Action仍然可以访问它们。但是,大部分时候,Action都无需直接访问HttpServetRequest和HttpServletResponse,从而给开发者更多灵活的选择。—可测性方面的对比:测试Struts1Action的一个主要问题是execute方法依赖于ServletAPI,这使得Action的测试要依赖于Web容器。为了脱离Web容器测试Struts1的Action,必须借助于第三方扩展:StrutsTestCase,该扩展下包含了系列的Mock对象(模拟了HttpServetRequest和HttpServletResponse对象),从而可以脱离Web容器测试Struts1的Action类。Struts2Action可以通过初始化、设置属性、调用方法来测试。—封装请求参数的对比:Struts1使用ActionForm对象封装用户的请求参数,所有的ActionForm必须继承一个基类:ActionForm。普通的JavaBean不能用作ActionForm,因此,开发者必须创建大量的ActionForm类封装用户请求参数。虽然Struts1提供了动态ActionForm来简化ActionForm的开发,但依然需要在配置文件中定义ActionForm;Struts2直接使用Action属性来封装用户请求属性,避免了开发者需要大量开发ActionForm类的烦琐,实际上,这些属性还可以是包含子属性的Rich对象类型。如果开发者依然怀念Struts1ActionForm的模式,Struts2提供了ModelDriven模式,可以让开发者使用单独的Model对象来封装用户请求参数,但该Model对象无需继承任何Struts2基类,是一个POJO,从而降低了代码污染。—表达式语言方面的对比:Struts1整合了JSTL,因此可以使用JSTL表达式语言。这种表达式语言有基本对象图遍历,但在对集合和索引属性的支持上则功能不强;Struts2可以使用JSTL,但它整合了一种更强大和灵活的表达式语言:OGNL(ObjectGraphNotationLanguage),因此,Struts2下的表达式语言功能更加强大。—绑定值到视图的对比:Struts1使用标准JSP机制把对象绑定到视图页面;Struts2使用“ValueStack”技术,使标签库能够访问值,而不需要把对象和视图页面绑定在一起。—类型转换的对比:Struts1ActionForm属性通常都是String类型。Struts1使用Commons-Beanutils进行类型转换,每个类一个转换器,转换器是不可配置的;Struts2使用OGNL进行类型转换,支持基本数据类型和常用对象之间的转换。—数据校验的对比:Struts1支持在ActionForm重写validate方法中手动校验,或者通过整合Commonsalidator框架来完成数据校验。Struts2支持通过重写validate方法进行校验,也支持整合XWork校验框架进行校验。—Action执行控制的对比:Struts1支持每一个模块对应一个请求处理(即生命周期的概念),但是模块中的所有Action必须共享相同的生命周期。Struts2支持通过拦截器堆栈(InterceptorStacks)为每一个Action创建不同的生命周期。开发者可以根据需要创建相应堆栈,从而和不同的Action一起使用。
解决方案三:
网上一大把。
解决方案四:
我问这种问题别人也是给你百度下拷贝上来
解决方案五:
解决方案六:
真正要去了解他们的不同,最好的办法就是两个都去使用一下。
解决方案七:
struts2其实继承webworkd的属性更多些,与struts1差别很大
解决方案八:
如此说来,S2比S1强大多咯?
解决方案:
Struts2比Struts1轻量很多。Struts2核心是过滤器。
解决方案:
醉过方知酒浓..建议自己去试试,体会哈
解决方案:
虽说读书百遍其义自见。。。但我还是觉得咋这行就得多练。。。
解决方案:
先从网上搜索资料,很多的。关键还是靠自己去理解,我一开始也没去仔细理解,但是做过几个项目后再回头来看,理解就会加深多了。
解决方案:
根本区别:struts1是MVC框架,而struts2是基于webwork框架的!
解决方案:
SSH用上struts2那确实是代码变的非常少了。去练练手就知道了。
解决方案:
1.struts1需要自己写formbean来匹配form表单,struts2自动匹配form表单。2.struts1和struts2的配置文件不同,相应的配置代码也不同。3.struts2并不是struts1基础上的升级版,不如说是webwork的升级版。struts2和struts1思想一样但是差别很大
解决方案:
S1对于初学者而言,出错的机会要少。S2不小心就会配置出错,IDE还无法告诉你。
解决方案:
现如今的主流是struts2,如果是初学者的话,struts1就没必要了解了!
解决方案:
该回复于2010-11-06 10:04:30被版主删除
解决方案:
struts1+webwork=struts2实质struts2核心是webwork,相对struts1,struts2的优势更多,网上一堆堆,否则也不会有struts2了,具体就不一一列举了。struts1唯一就是比struts2更节约内存,只创建一个对象。
解决方案:
用Struts1那还有人知道有Servlet这么个东西存在。用Struts2那纯属速成型的!
解决方案:
引用19楼bao110908的回复:
用Struts1那还有人知道有Servlet这么个东西存在。用Struts2那纯属速成型的!
呵呵。用Tapstry5以后,连Session,Application,request,response基本上也不知道了
解决方案:
不很清楚,我也来学习下
解决方案:
自己分别做个SSH1和SSH2的项目你就了解了
解决方案:
引用22楼wulinshishen的回复:
自己分别做个SSH1和SSH2的项目你就了解了
]是S2SH和S1SH
解决方案:
Struts2是基于WebWork的一个全新框架.Struts2主要改进是取代了Struts1的Servlet和Action.Struts2的核心框架是当作一个filter来实现其功能的,而Struts1是ActionServlet.然后在Action上,Struts1都少不了要传递Request等参数,还要继承Action父类,而Struts2只要实现了一个publicStringexecute()就可以了,这样Action就可以实现脱离Servlet测试.Struts2还提供了拦截器(Interceptot)等Struts1所没有的技术.总的来说,两个都需要理解,这样才能正确理解他们的区别。现在好像是struts2用的多了。
解决方案:
2楼这么职业啊!!!
解决方案:
引用19楼bao110908的回复:
用Struts1那还有人知道有Servlet这么个东西存在。用Struts2那纯属速成型的!
+
解决方案:
标记一下。
解决方案:
谷歌、百度都行,针对网上的回答,可以自己做一下,亲身体会更好
解决方案:
不想到google去下东西粘贴给楼主,我觉得还是工作中慢慢理解为好,只有用过才知道顺便在这里发下我的Android技术交流群:93551939希望大家进来学习!能来些高手更好,帮大家解决问题,帮助大家,谢谢了!
解决方案:
用过struts2就痛恨struts1,但现在的公司就是用struts1真是无耐。。。