Java开发之路 2016-10-18 11:19

当下流行的两种企业开发MVC开源框架,是我们Java程序猿必备知识能力。MVC,即模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。框架之所以流行,在于其易复用和简化开发,精髓在思想,掌握了核心思想,我们掌握其他类似框架也不会有问题,建议大家有精力的话读一下框架源码,尤其是Spring。

SSH和SSM定义

SSH 通常指的是 Struts2 做控制器(controller),spring 管理各层的组件,hibernate 负责持久化层。

SSM 则指的是 SpringMVC 做控制器(controller),Spring 管理各层的组件,MyBatis 负责持久化层。

共同点:1.Spring依赖注入DI来管理各层的组件。2.使用面向切面编程AOP管理事物、日志、权限等。

不同点:1.Struts2 和 SpringMVC 控制器(controller)控制视图和模型的交互机制的不同,

Struts2是Action类级别,SpringMVC是方法级别,更容易实现RESTful风格。

SSH 和 SSM 的实现原理

1.Struts2 的实现原理

Struts2框架执行步骤(Struts2使用Filter嵌入):

1、客户端初始化一个指向Servlet容器(例如Tomcat)的请求

2、这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助

3、接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请求是否需要调用某个Action

4、如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy

5、ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类

6、ActionProxy创建一个ActionInvocation的实例。

7、ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。

8、一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可 能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。

9、将处理结果返回给客户端

2.SpringMVC 的实现原理

SpringMVC框架执行步骤(SpringMVC使用Servlet嵌入):

1、客户端发出一个http请求给web服务器,web服务器对http请求进行解析,如果匹配DispatcherServlet的请求映射路径(在web.xml中指定),web容器将请求转交给DispatcherServlet.

2、DipatcherServlet接收到这个请求之后将根据请求的信息(包括URL、Http方法、请求报文头和请求参数Cookie等)以及HandlerMapping的配置找到处理请求的处理器(Handler)。

3-4、DispatcherServlet根据HandlerMapping找到对应的Handler,将处理权交给Handler(Handler将具体的处理进行封装),再由具体的HandlerAdapter对Handler进行具体的调用。

5、Handler对数据处理完成以后将返回一个ModelAndView()对象给DispatcherServlet。

6、Handler返回的ModelAndView()只是一个逻辑视图并不是一个正式的视图,DispatcherSevlet通过ViewResolver将逻辑视图转化为真正的视图View。

7、Dispatcher通过model解析出ModelAndView()中的参数进行解析最终展现出完整的view并返回给客户端。

Hibernate 和 MyBatis 两种ORM框架对比

两者的相同点

Hibernate与MyBatis都可以是通过SessionFactoryBuider由XML配置文件生成SessionFactory,然后由SessionFactory 生成Session,最后由Session来开启执行事务和SQL语句。其中SessionFactoryBuider,SessionFactory,Session的生命周期都是差不多的。

Hibernate和MyBatis都支持JDBC和JTA事务处理。

两者各自优势

MyBatis可以进行更为细致的SQL优化,可以减少查询字段。

MyBatis容易掌握,而Hibernate门槛较高。

Hibernate的DAO层开发比MyBatis简单,Mybatis需要维护SQL和结果映射。

Hibernate对对象的维护和缓存要比MyBatis好,对增删改查的对象的维护要方便。

Hibernate数据库移植性很好,MyBatis的数据库移植性不好,不同的数据库需要写不同SQL。

Hibernate有更好的二级缓存机制,可以使用第三方缓存。MyBatis本身提供的缓存机制不佳,更新操作不能指定刷新指定记录,会清空整个表,但是也可以使用第三方缓存。

Hibernate 封装性好,屏蔽了数据库差异,自动生成SQL语句,应对数据库变化能力较弱,SQL语句优化困难。

MyBatis仅实现了SQL语句和对象的映射,需要针对具体的数据库写SQL语句,应对数据库变化能力较强,SQL语句优化较为方便。

总结

SSM和SSH不同主要在MVC实现方式,以及ORM持久化方面不同(Hiibernate与Mybatis)。SSM越来越轻量级配置,将注解开发发挥到极致,且ORM实现更加灵活,SQL优化更简便;而SSH较注重配置开发,其中的Hiibernate对JDBC的完整封装更面向对象,对增删改查的数据维护更自动化,但SQL优化方面较弱,且入门门槛稍高。

附Spring家族:

SSH和SSM对比总结相关推荐

  1. Java面试题:SSH和SSM原理对比总结以及牵扯到的面试问题

    当下流行的两种企业开发MVC开源框架,是我们Java程 序猿必备知识能力.MVC是Model-View-Controller的简写."Model" 代表的是应用的业务逻辑dao层. ...

  2. Java Web框架对比SSH和SSM

    SSH:Spring+Struts2+Hibernate SSM:Spring+SpringMVC+MyBaitis 两个框架都是IoC容器+MVC框架+ORM框架. IoC的意思是控制反转,意思是把 ...

  3. SSH与SSM的区别以及相关技术的流行度

    先来百度一下,看看目前在流行啥 百度搜索搜索关键词 百度返回数量 SSM Java SSH Java 可以看到是SSM胜出. 所在分层 SSH SSM 页面层(View) JSP JSP(已经被thy ...

  4. Java Web学习总结(28)——Java Web项目MVC开源框架SSH和SSM比较

    SSH和SSM定义 SSH 通常指的是 Struts2 做控制器(controller),spring 管理各层的组件,hibernate 负责持久化层. SSM 则指的是 SpringMVC 做控制 ...

  5. SSH与SSM学习之SSH实现CRM练习17——添加客户拜访记录和列表

    SSH与SSM学习之SSH实现CRM练习17添加客户拜访记录和列表 一添加客户拜访记录和列表演示 1 添加客户拜访记录演示 2 客户拜访记录列表演示 二添加客户拜访记录分析 三添加客户拜访记录表实体关 ...

  6. SSH和SSM的区别(springmvc简介)

    SSH和SSM的区别:当下流行的两种企业开发MVC开源框架. SSH 通常指的是 Struts2 做控制器(controller),spring 管理各层的组件,hibernate 负责持久化层. S ...

  7. SSH与SSM框架的差别

    SSH和SSM的相同与不同之处 SSH 通常指的是 Struts2 做控制器(controller),spring 管理各层的组件,hibernate 负责持久化层. SSM 则指的是 SpringM ...

  8. 面试题:SSH 和 SSM 两个框架的浅显的区别?

    概述 本人使用过SSH框架一段时间,最后在优化项目的时候决定使用SSM框架,这两种框架的一些浅显的区别我在这里说下. SSH框架是Struts+Spring+Hibernate而SSM是指的Sprin ...

  9. SSH 和 SSM 有什么区别?

    SSH框架是Struts+Spring+Hibernate而SSM是指的Spring-MVC+Spring+MyBatis,光从这两个缩写就可以看出来,如果比较两者的区别的话主要比较Struct和Sp ...

  10. java和ssm是什么关系,JAVA --- SSH和SSM的区别

    SSH(Struts,Spring,Hibernate) 和 SSM(SpringMVC,Spring,MyBatis)的区别 SSH 通常指的是 Struts2 做前端控制器,Spring 管理各层 ...

最新文章

  1. java 中向文本写入和读取hashmap_就靠这一篇HashMap的讲解,我与头条面试官聊了一个小时。...
  2. LNMP单机高并发的简单优化
  3. php如何编写通信协议,定制通讯协议
  4. Eclipse For JavaSE安装、配置、测试
  5. Oracle 10g、11g :RAC关闭、启动、重启步骤
  6. 光电自动避障小车_AGV机器人:基于视觉避障的理论基础
  7. 动画:用动画给面试官解释 TCP 三次握手过程
  8. Qt 绘制炫彩滚动文本
  9. Win 10 关闭系统自动更新(解决svchost.exe 占用网络问题,解决svchost.exe不断消耗流量问题)
  10. Exception:org.eclipse.m2e.wtp.MarkedException: Unable to configure OHBC
  11. 张飞流水帐(完整版)
  12. 汉语韵律短语切分方法初探
  13. python股票策略_基于python的股票自动盯盘程序
  14. poi动态合并内容相同的单元格
  15. 网页要让它自适应各种手机屏幕宽度大小要怎么设置
  16. 【奥卡姆剃刀】一条短信骗走所有财产的分析
  17. oracle报错7001,Oracle 10g expdp导出报错ORA-4031的解决方法
  18. iText7 HTML to PDF 支持中文 支持加粗
  19. 安卓系统的电视机_2020年电视机最强选购指南,含15款高性价比电视机集合大推荐(2020年7月份更新)...
  20. RFID技术在口岸监管有哪些应用

热门文章

  1. Python数据处理Tips数据预处理操作方法汇总
  2. python菜鸟教程 | 素数
  3. 计算机等级考试Excel总成绩,计算机等级考试EXCEL练习题-6公务员考试成绩表
  4. 下列不是python内置函数的是_Python 内置函数
  5. 机器视觉入门 Visual Studio 2015 配置 Opencv3.2
  6. 电商十三、pinyougou02.sql的内容④
  7. maxscript文件常规命令
  8. mysql 日期表:工作日、周末、节假日,星期
  9. 适合做个人博客网站的一套静态页面模板,非常不错哦
  10. 专辑:Redis视频教程