`
85977328
  • 浏览: 1873232 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring MVC和Struts2的区别

 
阅读更多
1. 机制:spring mvc的入口是servlet,而struts2是filter,这样就导致了二者的机制不同。

2. 性能:spring会稍微比struts快。spring mvc是基于方法的设计,而sturts是基于类,每次发一次请求都会实例一个action,每个action都会被注入属性,而spring基于方法,粒度更细,但要小心把握像在servlet控制数据一样。spring3 mvc是方法级别的拦截,拦截到方法后根据参数上的注解,把request数据注入进去,在spring3 mvc中,一个方法对应一个request上下文。而struts2框架是类级别的拦截,每次来了请求就创建一个Action,然后调用setter getter方法把request中的数据注入;struts2实际上是通过setter getter方法与request打交道的;struts2中,一个Action对象对应一个request上下文。

3. 参数传递:struts是在接受参数的时候,可以用属性来接受参数,这就说明参数是让多个方法共享的。

4. 设计思想上:struts更加符合oop的编程思想, spring就比较谨慎,在servlet上扩展。

5. intercepter的实现机制:struts有以自己的interceptor机制,spring mvc用的是独立的AOP方式。这样导致struts的配置文件量还是比spring mvc大,虽然struts的配置能继承,所以我觉得论使用上来讲,spring mvc使用更加简洁,开发效率Spring MVC确实比struts2高。spring mvc是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上spring3 mvc就容易实现restful url。struts2是类级别的拦截,一个类对应一个request上下文;实现restful url要费劲,因为struts2 action的一个方法可以对应一个url;而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了。spring3 mvc的方法之间基本上独立的,独享request response数据,请求数据通过参数获取,处理结果通过ModelMap交回给框架方法之间不共享变量,而struts2搞的就比较乱,虽然方法之间也是独立的,但其所有Action变量是共享的,这不会影响程序运行,却给我们编码,读程序时带来麻烦。

6. 另外,spring3 mvc的验证也是一个亮点,支持JSR303,处理ajax的请求更是方便,只需一个注解@ResponseBody ,然后直接返回响应文本即可。
24
3
分享到:
评论
32 楼 85977328 2014-03-14  
kangzj 写道
之前一直纠结各个让spring mvc的controller方法加个从request来的数据,后来发现springmvc controller默认是单例,只能加公共方法,映射过的方法各自调用,不太优雅。后来想到用一个ThreadLocal变量来处理,好看一些了

想让conrtoller保存数据?
31 楼 85977328 2014-03-14  
kangzj 写道
还有springmvc可以加@prototype注解,就变成每个请求都新建对象了。没有看过源码哈,说的不对请朴老师指正

恩,这个倒没用过,理论上应该可以。controller也是个特殊的bean
30 楼 kangzj 2014-03-14  
还有springmvc可以加@prototype注解,就变成每个请求都新建对象了。没有看过源码哈,说的不对请朴老师指正
29 楼 kangzj 2014-03-14  
之前一直纠结各个让spring mvc的controller方法加个从request来的数据,后来发现springmvc controller默认是单例,只能加公共方法,映射过的方法各自调用,不太优雅。后来想到用一个ThreadLocal变量来处理,好看一些了
28 楼 wenzibin2010 2014-01-21  
27 楼 xianbin 2013-01-08  
bantjmh 写道
请教一下,我使用@ResponseBody注解,直接返回字符串时,中文乱码怎么解决?


在web.xml中加入:
<!-- Reads request input using UTF-8 encoding -->
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>

<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
26 楼 bantjmh 2012-12-21  
请教一下,我使用@ResponseBody注解,直接返回字符串时,中文乱码怎么解决?
25 楼 85977328 2012-09-06  
本人觉得,1个框架能干的事情。没必要2个框架来做。
简单最好。
24 楼 Shen.Yiyang 2012-09-06  
inotgaoshou 写道
Shen.Yiyang 写道
superpeter 写道
如果大家有用过struts 2.1以后的版本,应该不会觉得spring mvc有什么优势了。反而,spring mvc与servlet绑得太紧,使用起来没有struts 2方便一些。Struts 2现在也支持annotation,甚至annotation也可以不用,完全零配置。
对ajax的支持,struts2提供了一个json结果类型,处理起来相当方便,基本不用接触底层的JSON API。
struts2一个action也可以直接配置成多个逻辑action,在与spring整合后,可以将action配置成单例。
总体上说,struts2还是比spring更好用一些的。

struts2确实非常好用,action的设计对于解耦非常好,不仅仅是web app,也可以轻松移植到什么形式的调用机制;  但是,“在与spring整合后,可以将action配置成单例。
” 没现场问题吗?



但是,“在与spring整合后,可以将action配置成单例。如果交给spring管理Action,应该配置prototype吧~service或dao才是singleton

是的,都是这样配的,所以我觉得他说的很奇怪啊。。。
23 楼 inotgaoshou 2012-09-06  
Shen.Yiyang 写道
superpeter 写道
如果大家有用过struts 2.1以后的版本,应该不会觉得spring mvc有什么优势了。反而,spring mvc与servlet绑得太紧,使用起来没有struts 2方便一些。Struts 2现在也支持annotation,甚至annotation也可以不用,完全零配置。
对ajax的支持,struts2提供了一个json结果类型,处理起来相当方便,基本不用接触底层的JSON API。
struts2一个action也可以直接配置成多个逻辑action,在与spring整合后,可以将action配置成单例。
总体上说,struts2还是比spring更好用一些的。

struts2确实非常好用,action的设计对于解耦非常好,不仅仅是web app,也可以轻松移植到什么形式的调用机制;  但是,“在与spring整合后,可以将action配置成单例。
” 没现场问题吗?



但是,“在与spring整合后,可以将action配置成单例。如果交给spring管理Action,应该配置prototype吧~service或dao才是singleton
22 楼 Shen.Yiyang 2012-09-06  
superpeter 写道
如果大家有用过struts 2.1以后的版本,应该不会觉得spring mvc有什么优势了。反而,spring mvc与servlet绑得太紧,使用起来没有struts 2方便一些。Struts 2现在也支持annotation,甚至annotation也可以不用,完全零配置。
对ajax的支持,struts2提供了一个json结果类型,处理起来相当方便,基本不用接触底层的JSON API。
struts2一个action也可以直接配置成多个逻辑action,在与spring整合后,可以将action配置成单例。
总体上说,struts2还是比spring更好用一些的。

struts2确实非常好用,action的设计对于解耦非常好,不仅仅是web app,也可以轻松移植到什么形式的调用机制;  但是,“在与spring整合后,可以将action配置成单例。
” 没现场问题吗?
21 楼 jianwwpro 2012-09-06  
@ResponseBody 是属于消息处理机制了,可根据返回类型自适应是json还是xml还是byte[]或excel,只需responsebody,自动就给处理了。事先配置一下消息处理器。
20 楼 jiuyuehe 2012-09-06  
spring mvc  以前听的不多,最近在网站上看到好多关于spring mvc的介绍
a283037321 写道
我是小白,我感觉struts2的跳转方便一些,spring跳转到另一个action貌似很恶心一样,当然,我不熟练这俩东西,嘿嘿


这方面就是因为他们的设计不同了,spring mvc他的每一个方法都是独立的,从一个action 跳到另一个action 是不能像struts那么简单的,但是也可以很好的从一个url跳另一个url
19 楼 wazhouqian 2012-09-06  
各有各的优势,个人觉得struts2的设计更容易理解一些
18 楼 superpeter 2012-09-06  
补充一点:现在struts2也支持restful。
17 楼 superpeter 2012-09-06  
如果大家有用过struts 2.1以后的版本,应该不会觉得spring mvc有什么优势了。反而,spring mvc与servlet绑得太紧,使用起来没有struts 2方便一些。Struts 2现在也支持annotation,甚至annotation也可以不用,完全零配置。
对ajax的支持,struts2提供了一个json结果类型,处理起来相当方便,基本不用接触底层的JSON API。
struts2一个action也可以直接配置成多个逻辑action,在与spring整合后,可以将action配置成单例。
总体上说,struts2还是比spring更好用一些的。
16 楼 hantsy 2012-09-06  
引用
1. 机制:spring mvc的入口是servlet,而struts2是filter,这样就导致了二者的机制不同。

好几年前的 Struts 2.1 开始就支持 Servlet 入口了,我还改过原始的 Struts2 NetBeans 插件让它支持Web.xml中注册Servlet,自己上 http://hantsy.blogspot.com 看效果。 OSC 上一张图片也是我改造后的 Struts 2 插件效果,http://www.oschina.net/p/nbstruts2support
15 楼 gaobo8993 2012-09-06  
还不错 受教了
14 楼 shoru 2012-09-06  
我觉得抨击spring变态的,可能是对servlet的理解还不深。
13 楼 85977328 2012-09-06  
spring的社区和用户量更大一些,我的工作经验当中,都开始使用spring mvc了。只有遗留系统在用struts2

相关推荐

Global site tag (gtag.js) - Google Analytics