问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

struts2和springmvc有什么区别

发布网友 发布时间:2022-04-14 22:27

我来回答

4个回答

热心网友 时间:2022-04-14 23:56

1)springmvc的入口是一个servlet,即前端控制器,例如:*.action
struts2入口是一个filter过虑器,即前端过滤器,例如:/*

2)springmvc是基于方法开发,传递参数是通过方法形参,可以设计为单例
struts2是基于类开发,传递参数是通过类的属性,只能设计为多例

3)springmvc通过参数解析器是将request对象内容进行解析成方法形参,将响应数据和页面封装成 ModelAndView对象,最后又将模型数据通过request对象传输到页面
struts采用值栈存储请求和响应的数据,通过OGNL存取数据

热心网友 时间:2022-04-15 01:14

Struts2与Struts1的对比

1,在Action实现类方面:
Struts1要求Action类继承一个抽象基类;Struts1的一个具体问题是使用抽象类编程
而不是接口。Struts2 Action类可以实现一个Action接口,也可以实现其他接口,使可选和定*务成为可能。
Struts2 提供一个ActionSupport基类 去实现常用的接口。即使Action接口不是必须实现的,只有一个包含
execute方法的POJO类都可以用作Struts2的Action。

2,线程模式方面:
Struts1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单例策略*了Struts1 Action能做的事,并且要在开发时特别小心。Action资源必须是线程安全的或同步的;Struts2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。

3,Servlet依赖方面:
Struts1 Action依赖于Servlet API,因为Struts1 Action的execute方法中有HttpServletRequest和HttpServletResponse方法。
Struts2 Action 不再依赖于ServletAPI,从而允许Action脱离Web容器运行,从而降低了测试Action的难度。当然,如果Action 需要直接访问HttpServletRequest和HttpServletResponse参数,Struts2 Action仍然可以访问它们。但是,大部分时候,Action都无需直接访问
HttpServletRequest和HttpServletResponse,从而给开发者更多灵活的选择。

4,可测试方面:
测试Struts1 Action的一个主要问题是execute方法依赖于Servlet于ServletAPI, 这使得Action 仍然的测试要依赖于Web容器。为了脱离Web容器测试Struts1 的Action, 必须借助于第三方扩展:Struts TestCase,该扩展下包含了系列的Mock对象,从而脱离Web容器测试Struts1的Action类。
Struts2Action可以通过初始化,设置属性,调用方法来测试。

5,封装请求参数方面:
Struts1 使用ActionForm对象封装用户的请求参数,所有的ActionForm 必须继承一个
基类:ActionForm。 普通的JavaBean不能用作ActionForm因此,开发者必须创建大量的ActionForm类封装用户请求参数。虽然Struts1 提供了动态ActionForm 来简化ActionForm 的开发,但依然需要在配置文件中定义ActionForm; Struts2 直接使用Action 属性来封装用户请求属性,避免了开发者需要大量开发ActionForm类的繁琐,实际上,这些属性还可以是包含子属性的Rich对象类型。如果开发者依然怀念Struts1 ActionForm 的模式
Struts 2 提供了ModelDriven 模式, 可以让开发者使用单独的Model 对象来封装用户请求参数,但该Model对象无须继承任何Struts2基类,是一个POJO,从而
降低了代码污染。

6,表达式语言方面:
Struts1 整合了JSTL,因此可以使用JSTL表达式语言。这种表达式语言有基本对象图遍
历,但在对集合和索引属性的支持上则功能不强
Struts2 可以是用JSTL,但它整合了一种更强大和灵活的表达
式语言:OGNL(Object Graph Notation Language),因此,Struts2下的表达式语言功能更加强大。

7,绑定值到视图方面:
Struts1 使用标准JSP机制把对象绑定到视图页面;
Struts2 使用“ValueStack”技术,使标签能够访问值,而不需要把对象和视图页面绑定在一起。

8,类型转换的方面:
Struts 1 ActionForm 属性通常都是String 类型。 Struts1 使用
Commons-Beanutils 进行类型转换,支持基本数据类型和常用对象之间的转换。

9,数据校验的方面:
Struts1 支持在ActionForm 重写 validate方法手动校验,或者通过整合Commonsalidator框架来完成数据校验。
Struts2 支持通过重写validator方法进行校验,也支持整合XWork校验框架进行校验

10,Action执行控制的方面:
Struts1 支持每一个模块对应一个请求处理(既生命周期的概念),但是模块中的所有Action必须共享相同的生命周期。
Struts2支持通过*堆栈为每一个Action 创建不通的生命周期。开发者可以根据需要创建相应堆找,从而和不同的Action一起使用。

热心网友 时间:2022-04-15 02:49

spring3mvc与struts2比较
项目刚刚换了web层框架,放弃了struts2改用spring3mvc
当初还框架的时候目的比较单纯---springmvc支持rest,小生对restful url由衷的喜欢
不用不知道 一用就发现开发效率确实比struts2高

我们用struts2时采用的传统的配置文件的方式,并没有使用传说中的0配置
spring3 mvc可以认为已经100%零配置了(除了配置springmvc-servlet.xml外)

比较了一下strus2与spring3 mvc的差别

============================================
struts2框架是类级别的拦截,每次来了请求就创建一个Action,然后调用setter getter方法把request中的数据注入
struts2实际上是通过setter getter方法与request打交道的
struts2中,一个Action对象对应一个request上下文

spring3 mvc不同,spring3mvc是方法级别的拦截,拦截到方法后根据参数上的注解,把request数据注入进去
在spring3mvc中,一个方法对应一个request上下文

好了 我们来整理一下
struts2是类级别的拦截, 一个类对应一个request上下文,
springmvc是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应
所以说从架构本身上 spring3 mvc就容易实现restful url
而struts2的架构实现起来要费劲
因为struts2 action的一个方法可以对应一个url
而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了

===================================
spring3mvc的方法之间基本上独立的,独享request response数据
请求数据通过参数获取,处理结果通过ModelMap交回给框架
方法之间不共享变量

而struts2搞的就比较乱,虽然方法之间也是独立的,但其所有Action变量是共享的
这不会影响程序运行,却给我们编码 读程序时带来麻烦

====================================
spring3 mvc的验证也是一个亮点,支持JSR303
处理ajax的请求更是方便 只需一个注解@ResponseBody ,然后直接返回响应文本即可

附上一段代码
Java代码
@RequestMapping(value="/whitelists")
public String index(ModelMap map){
Account account = accountManager.getByDigitId(SecurityContextHolder.get().getDigitId()) ;
List<Group> groupList = groupManager.findAllGroup(account.getId()) ;
map.put("account", account);
map.put("groupList", groupList);
return "/group/group-index" ;
}
//@ResponseBody ajax响应
@RequestMapping(value="/whitelist/{whiteListId}/del")
@ResponseBody
public String delete(@PathVariable Integer whiteListId){
whiteListManager.deleteWhiteList(whiteListId) ;
return "success" ;
}

热心网友 时间:2022-04-15 06:48

从Struts2的发展过程来看,Struts2继承了Struts与WebWork的血脉,Struts2取两者之精华,形成新德框架,但是struts2还是更多的继承了struts的设计思想,并加入了WebWork的优点。在了解Struts2体系之前,让我们先看看struts2对struts做了哪些修改。
Struts2与struts的不同主要体现在以下几个方面。
(1) Action类

1》在struts中都是使用抽象类编程而不是接口,因此他要求开发Action类继承一个抽象的基类,如DispatchAction等。

2》Struts2则基于接口编程,我们的Action类可以实现一个Action接口,使可选和定制的服务成为可能。Struts2提供一个ActionSupport基类去实现常用的接口。更加强大的是,在struts2中Action接口不是必需的,任何有execute()函数的pojo对象都可以用作struts2的Action类来使用。

(2) 线程模式

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

2》 struts2的Action对象为每一个请求产生一个实例,因此没有线程安全问题。

(3) Servlet依赖

1》 struts的Action依赖于Servlet API,当一个Action被调用时,HttpServletRequest和HttpServletResponse被传递给执行方法,例如:

publicActionForward execute(Actionmapping mapping,ActionForm Form,HttpServletRequestrequest,HttpServletResponse response){

}

2》 struts2的Action不依赖与容器,允许Action脱离容器单独被测试。如果需要,Struts2的Action任然可以访问初始的request和response。例如下面的这个类MyAction.Java,他可以通过ActionContext对象取得Session值,也可以通过ServletActionContext对象取得request对象。

Publicclass MyAction{
protected Object getSession(String key){
return ActionContext.getContext().getSession(key);
}
protectedHttpServletRequest getRequest(){
return(String)ServletActionContext.getRequest();
}
}

(4) 可测试性

1》 测试Struts Action的一个主要问题是,execute()方法暴露了Servlet API,这使得测试要依赖于容器。虽然有第三方的软件struts TestCase能够使用模拟对象来进行测试,但显然会让我们的测试变得更加复杂。

2》 Struts2 Action的类是POJO对象,因此可以直接编写测试类来测试Action类,只需要在测试类中注入属性即可。

(5) 捕获输入

1》 struts使用ActionForm对象捕获用户输入,所有的ActionForm必须继承一个基类ActionForm。因为其他的JavaBean不能用作ActionForm,开发者经常创建多余的类捕获输入。动态表单可以作为创建传统ActionForm的选择,但是,开发者可能是再创建已经存在的JavaBean,仍然会导致有冗余的JavaBean;

2》 struts2直接使用Action属性作为输入属性,消除对第二个输入对象的需求。输入属性可能是有自己子属性的rich对象类型。Action属性能够通过Web页面的taglibs访问。同时,struts2也支持ActionForm模式。

(6) 表达式语言

1》 struts整合了JSTL,这种EL有基本对象图遍历,但是对集合和索引属性的支持很弱

2》 struts2可以使用JSTL,但是也支持一个更强大和灵活的表达式语言OGNL

(7) 绑定值到页面

1》 struts使用标准jsp机制把对象绑定到页面中来访问

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

(8) 类型转换

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

2》 struts2使用OGNL进行OGNL进行类型转换,提供了基本和常用对象转换器。

(9) 数据校验

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

2》 struts2支持通过validata()方法和XWork校验框架来进行校验,XWork校验框架使用为属性类型定义的校验和内容校验,来支持chain校验子属性。

(10) Action执行的控制

1》 struts支持每一个模块有单独的Request Processors(生命周期),但是模块中的所有Action必须提供相同的生命周期;

2》 struts2支持通过*堆栈(Interceptor Stacks)为每一个Action创建不同的生命周期,堆栈能够根据需要和不同的Action一起使用
spring MVC 和 struts2 的区别有哪些?

Spring MVC 和 Struts2 都是 Java Web 框架,它们之间的区别在于:1. 加载机制不同:Spring MVC 的入口是 Servlet,而 Struts2 是 Filter。2. 拦截机制不同:Struts2 是类级别的拦截,一个类对应一个 request 上下文,而 Spring MVC 是方法级别的拦截,一个方法对应一个 request 上下文,同时跟一...

springmvc和struts2的区别

SpringMVC 和Struts2的区别 1. 机制:spring mvc的入口是servlet,而struts2是filter,这样就导致了二者的机制不同。2. 性能:spring会稍微比struts快。spring mvc是基于方法的设计,而sturts是基于类,每次发一次请求都会实例一个action,每个action都会被注入属性,而spring基于方法,粒度更细,但要小心...

springmvc和strtus2的区别

1、springmvc基于方法开发的,struts2基于类开发的。2、单例和多例的区别:springmvc在映射的时候,通过形参来接收参数的,是将url和controller方法映射,映射成功后,springmvc生成一个handlers对象,对象中只包括一个method,方法执行结束的时候,形参的数据就销毁,所以springmvc可以进行单例开发,并且建议...

struts2和springmvc有什么区别

2)springmvc是基于方法开发,传递参数是通过方法形参,可以设计为单例 struts2是基于类开发,传递参数是通过类的属性,只能设计为多例 3)springmvc通过参数解析器是将request对象内容进行解析成方法形参,将响应数据和页面封装成 ModelAndView对象,最后又将模型数据通过request对象传输到页面 struts采用值栈存...

springmvc和struts2的机制各有什么利弊

SpringMVC是一个基于组件的开发框架,组件的不同实现体系构成了“形”;组件的逻辑串联构成了“神”。因此,“形散神不散”: SpringMVC的逻辑主线始终不变,而行为模式却可以多种多样。第五、更加贴合Web发展的趋势,这个更加虚了,不再展开说这个 问题了。第六、技术上的放缓导致了程序员对Struts2...

springmvc和struts2的区别

struts2是类级别的拦截, 一个类对应一个request上下文,springmvc是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应 所以说从架构本身上 spring3 mvc就容易实现restful url 而struts2的架构实现起来要费劲 因为struts2 action的一个方法可以对应一个url 而其类属性却被所有方法...

SpringMVC当中的Controller接口和Struts2当中的Action有什么区别

SpringMVC的Controller和Struts2的Action均是实现MVC模式的控制层。两者区别如下:SpringMVC可精确控制到方法上,Controller可以单例开发,Struts2的Action则是多例prototype开发,基于类进行拦截请求的。SpringMVC的速度一般比Struts2要快,主要是s标签的原因。所以建议使用jstl表达式。Struts2曾经爆出重大漏洞,就...

struts2 hibernate spring 三大框架有什么区别,他们各自适用的范围是什...

spring是一个多元化的框架,它有类似struts的MVC。但是他最主要的功能是依赖注入和面向切面编程。所谓依赖注入就是说以前你需要一个对象的话需要new一个,这样势必造成代码写死到程序中了,这样不利于改动。依赖注入可以把你需要的对象自动生成了给你,这样用起来就很灵活了。AOO就是在程序需要进行统一处理...

请问spring与struts有什么区别?

1、实现机制不同 struts2框架是类级别的拦截,每次来了请求就创建一个controller中对应的Action,然后调用setter getter方法把request中的数据注入 。struts2实际上是通过setter getter方法与request打交道的。struts2中,一个Action对象对应一个request上下文。spring3 mvc不同,spring3mvc是方法级别的拦截,...

SpringMVC当中的Controller接口和Struts2当中的Action有什么区别

以下是二者具体的区别:这二者主要的区别以及比较明显的去边就是action是通过getter setter方法去注入数据的,而controller是通过@注解去实现的。一个action会对应一个request请求的上下文,且一个action只可以对应一个url;controller是一个方法对应一个request请求上下文,同时一个方法和一个url对应。再者就是...

struts2和spring区别 mvc和springmvc的区别 ssm和springmvc的区别 struts2和spring整合 spring框架和struts j2ee和spring区别 springstruts spring包装struts springboot替代ssm
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
领组词有哪些词语有 推荐点自己个人认为不错的 简洁点的手机铃声 还有短信音 重点是... 我这个配置能带动GTX760吗 请问我的电脑配置 是配GTX660还是GTX760 电源室安钛克 VP450P_百 ... 请问我这样的配置能带起GTX760不 我现在电脑想加显卡,目前看中GTX760,我这样的配置能配这显卡吗? 以下配置能上GTX760显卡吗 为什么四氧化三铁标不出化合价 ...下铅丹(用X表示)与硝酸能发生反应:X+4HNO3═PbO2+2 四氧化三铁(Fe 3 O 4 )中铁元素的化合价有+2和+3价,其化学式可改写为F... 北汽绅宝暖风怎么开 北汽绅宝x35前后雨刷器同时刷是什么原因? 北汽绅宝d20加玻璃水在什么位置 听说目前骁龙820是今年最厉害的手机处理器芯片,为什么装上这个处理器的很多手机评价都没有华为的麒麟 国家认可的电线电缆检测中心有哪几家? 北汽威旺m20前风玻璃刮水器怎么操作 华为P9卡槽在哪里&nbsp;华为P9怎么装卡&nbsp;华为P9&nbsp;Plus装sim卡图文教程 丫丫网华为P10开箱上手:它比华为P9厉害在这几点 华为p9详细评测 华为P9和华为荣耀畅玩5c哪个好 华为p9开箱使用还用粘膜吗 iphone录得音频怎么导出来 北汽雨刷器开关使用图解 打印机电脑驱动能改手机驱动吗? 用iphone录的音频怎么导出来 北汽绅宝x55雨刮器怎么安装 手机可以下载电脑打印机驱动器吗 苹果手机怎么安装惠普打印机驱动? 给退休员工的祝词有哪些? 银河奇异果里的电视剧能缓存吗 思科交换机一个端口可以绑定多少个ip地址及mac地址呢 电视剧卫子夫哪个播放器先放? 在哪里可以看卫子夫全集电视剧 密室逃脱 逃出死亡村庄 这门怎么进 把球放进去怎么没反应 密室逃脱逃出死亡村庄怎么修改中文 密室逃脱死亡实验室攻略 密室逃脱18攻略梯子横杠在哪里 死亡游戏之密室逃脱攻略 密室逃脱婉清攻略 在目前学业压力普遍较大的环境下,家长该如何关注孩子的心理健康? 密室逃脱系列游戏 密室逃脱新人,不知从何入手 心理健康很重要,孩子的心理健康父母需要注意哪些方面呢? 孩子心理健康很重要,如何保护孩子心理健康? win10的wlan禁用了怎么开启 WIN10 wifi链接不了,wlan被禁用启用不能 手机卡号前面1772730归属地 (0757) 8228 4156是什么电话? 15302842880。这个是广东佛山的电信日租卡。请各位大神帮我看看这个号码能卖多少钱,谢谢 佛山电信卡在江西查话费拔什么号? 佛山、中山电信卡,谁推荐一下,要求全国流量多,免费通话多,月租50左右的