码迷,mamicode.com
首页 > 编程语言 > 详细

spring3mvc与struts2比较

时间:2018-06-16 01:07:22      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:new   很多   其他   ppi   plist   IV   文本   struts2   java代码   

项目刚刚换了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")   
  1. public String index(ModelMap map){   
  2.     Account account = accountManager.getByDigitId(SecurityContextHolder.get().getDigitId()) ;   
  3.     List<Group> groupList = groupManager.findAllGroup(account.getId()) ;   
  4.     map.put("account", account);   
  5.     map.put("groupList", groupList);   
  6.     return "/group/group-index" ;   
  7. }   
  8.        //@ResponseBody ajax响应     
  9. @RequestMapping(value="/whitelist/{whiteListId}/del")   
  10. @ResponseBody     
  11. public String delete(@PathVariable Integer whiteListId){   
  12.     whiteListManager.deleteWhiteList(whiteListId) ;   
  13.     return "success" ;   
  14. }  

 

评论截选:

注解和性能没有关系,Servlet的生命周期是这样的,在调用这个Servlet时候才创建这个Servlet的类并运行init()方法,然后另外有人运行这个Servlet的时候并没有重启创建Servlet和运行里边的init()方法,所以Servlet容器时单利的,spring就是Servlet的封装的框架,包括所有的依赖注入都是在tomcat启动的时候全部被初始化的,其他的注解也一样,也就是说注解也就是以前的xml的配置的替代,以前没个请求都要运行一次xml吗?并不是的,xml是在tomcat启动时就读一次而已并利用里边的配置初始化很多的东西,然后就不在使用了,因为都成了单利的,这样就保证了效率,不是每次都把我们要注入的全部new一次,而是tomcat启动的时候全部new一次以后就不new了,保证了效率问题。


所以我不明白那个 光看注解就知道性能不好? 
注解就是替代了xml配置而已,而且也是初始化一次,也就是说和编写Servlet一样的在init()中做了很多的事而已,并且以后不会在运行init()了,除非你重启tomcat。

struts1也一样,运行一个action的方法的时候创建一个action类,以后再运行就不会创建了,其实也是Servlet的封装的框架。 

struts2特殊一些,没个请求要new一个action来保证线程安全。所以效率会低一些,但是不会低的特别离谱。 

这样也说明了spring3的mvc和struts1的mvc还有Servlet都是方法的线程安全,所以在类方法声明的私有或者公有变量不是线程安全的,struts2的确实是线程安全的。

所有各有各的好处,用什么当然是仁者见仁智者见智了。 

不过我们确实在新项目中大量的使用了spring3,因为REST挺好的。

spring3mvc与struts2比较

标签:new   很多   其他   ppi   plist   IV   文本   struts2   java代码   

原文地址:https://www.cnblogs.com/shan1393/p/9189401.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!