项目刚刚换了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 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" ;

}

评论截选:

注解和性能没有关系,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挺好的。

java开发和structs的关系_java---springMVC与strutsMVC的区别相关推荐

  1. java开发的框架有哪些_java开发中常用框架有哪些

    1 java开发中常用框架有哪些 java从推出到现在技术不断发展,语言也优化的越来越好,对于java工程师来说技术的不断发展,他们需要不断学习java进阶,而对于新手来说就能从基础到核心.那么新手该 ...

  2. java开发环境的建立过程_Java开发环境的搭建及第一个Java程序的创建

    Java的几个基本概念: JVM:Java Virtul Machine(Java虚拟机) JRE:Java Runtime Environment(Java运行时环境) JDK:Java Devel ...

  3. java开发需要掌握哪些东西_java开发需要掌握哪些技能

    1 java开发需要掌握哪些技能 java,互联网发展出来的产物,如今变成了屈指可数的几大编程语言之一,他的未来是不可限量的.因此很多人都想要学会这门技术,希望在以后能有他的一席之地.那么下面小编给大 ...

  4. java中类与类的关系_Java中类与类的关系

    在java中类和类的关系大致分三种:泛化.关联.依赖. 1. 泛化(Generalization) "XX是一个XX"关系(is a),通常使用的关键词为 extends.impl ...

  5. java开发中遇到的问题_java开发中遇到的问题及解决方法(持续更新)

    摘自 http://blog.csdn.net/pony12/article/details/38456261 工作中,以C/C++开发为主,难免与其他服务和Web进行交换,Java开发必不可少,又不 ...

  6. java开发面试自我介绍模板_java求职自我介绍范文_java工程师面试个人介绍

    Java是一种可以撰写跨平台应用程序的面向对象的程序设计语言,应聘Java工作时,面试的自我介绍要与岗位接轨.本文是学习啦小编为大家整理的java求职自我介绍范文,仅供参考. java求职自我介绍范文 ...

  7. java开发工程师的晋升路径_Java开发工程师职业发展及晋升路线图

    1.Java程序员 这是Java开发工程师的第一阶段了,一般是刚入门Java行业者.这一阶段主要是掌握了一定的Java编程技术,有一定的Java语言基础,能够了解.掌握和编写一定的代码.处在这一阶段的 ...

  8. java开发oa系统的目的_JAVA开发的OA系统价值体现

    根据目前的OA市场,PHP和JAVA各自为政,PHP开发的OA产品主要是用于低价战,但JAVA开发的OA产品大部分集中在高价战.导致产品价格的关键因素:PHP门槛非常低,程序员数量也很多,再通过PHP ...

  9. 简述java开发环境的建立过程_java开发环境的完整搭建过程

    卸载JDK 1.删除java的安装目录 2.删除JAVA_home 3.删除path下关于java的目录 4.java -version 安装JDK 1.百度搜索JDK8,找到下载地址 2.同意协议 ...

最新文章

  1. 吐血整理:24种可视化图表优缺点对比,一图看懂!
  2. linux内核grub的作用与用途,linux中grub是干嘛的
  3. freemarker和thymeleaf的使用样例
  4. python中getattr()的用法
  5. 积累的历年博客终于发完了
  6. 1.5 密码学应用PKI体系
  7. wps怎么图片透明_wpsword如何设置图片透明度
  8. Spring - 事件监听机制 源码解析
  9. 谷歌浏览器chrome扩展插件-农名的世界脚本
  10. 【面试题】京东大数据面试真题汇总,收藏必备
  11. CAcls命令在提权中的使用
  12. xpath解析最全攻略
  13. 苹果 iOS 15 正式发布
  14. Cordova开机画面
  15. 秒表工具类StopWatch
  16. PAT——1121 Damn Single 甲级
  17. JS数组中的剩余方法
  18. 女子怀孕怕与胎儿抢营养 剪掉一米三长发
  19. Docker使用中的一些错误总结
  20. 计算机应用技术故事会教案,信息技术教学故事

热门文章

  1. Ant Design Pro 开发上手
  2. Mysql显示创建表的sql语句
  3. jquery调用WCF
  4. Java抓取淘宝/天猫商品详情
  5. 手机内存卡转化linux,Android 往手机内存卡上存储用户名与密码的操作
  6. 四阶龙格积分法 matlab,matlab控制系统计算机仿真实验-完整版
  7. 【OS学习笔记】三十 保护模式九:段页式内存管理机制概述
  8. Linux重定向的理解
  9. Hadoop学习笔记
  10. [SimplePlayer] 2. 在屏幕上显示视频图像