前言

  当下SpringBoot盛行,咱再聊聊SpringBoot盛行之前的框架组合,当做复习巩固哈。

  在聊之前,得先说说MVC,MVC全名是Model View Controller,是模型(model)--视图(view)--控制器(controller)的缩写。M是指业务模型,V是指用户界面,C则是控制器。

  一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。

  本人是在学校的时候学过SSH和SSM,并用该框架组合做了几个私单,算是给大学生活餐加点外快吧,哈哈

一、SSH和SSM的定义:

  SSH:指的是Struts2(做前端控制器),Spring(管理各层的组件),Hibernate(负责持久化层)

  SSM:指的是SpringMVC(做前端控制器),Spring(管理各层的组件),Mybatis(负责持久化层)

二、SSH和SSM的实现原理:

  

  1、Struts2的原理:  

  Struts2框架执行过程:

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

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

  3)、接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请求是否需要调用某个Action,FilterDispatcher是控制器的核心,就是mvc中c控制层的核心

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

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

  6)、ActionProxy创建一个ActionInvocation的实例;

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

  8)、一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是一个需要被表示的JSP或者FreeMarker的模板;

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

  2、SpringMVC的原理:

  SpringMVC框架执行过程:

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

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

  3)、DispatcherServlet根据HandlerMapping找到对应的Handler,并返回;

  4)、将处理权交给Handler(Handler将具体的处理进行封装),再由具体的处理器适配器(HandlerAdapter)对Handler进行具体的调用;

  5)、处理器适配器执行Handler;

  6)、Handler对数据处理完成以后将返回一个ModelAndView对象给处理器适配器;

  7)、处理器适配器向前端控制器返回ModelAndView(ModelAndView是SpringMVC框架的一个底层对象,包括Model和View);

  8)、Handler返回的ModelAndView只是一个逻辑视图,并不是一个正式的视图,前端控制器请求视图解析器(ViewResolver)去进行视图解析,根据逻辑视图名解析成真正的视图(jsp);

  9)、视图解析器向前端控制器返回View;

  10)、前端控制器进行视图渲染,视图渲染将模型数据(在ModelAndView对象中)填充到request域中;

  11)、前端控制器向用户响应结果。

  3、Hibernate的原理:

 

  Hibernate框架执行过程:

  1)、通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件;

  2)、由hibernate.cfg.xml中的读取并解析映射信息;

  3)、通过config.buildSessionFactory(); //创建SessionFactory

  4)、sessionFactory.openSession();  //打开Session

  5)、session.beginTransaction();  //创建事务Transaction

  6)、persistent operate持久化操作;

  7)、session.getTransaction().commit();  //提交事务

  8)、关闭Session;

  9)、关闭SessionFactory;

  4、Mybatis原理:

  Mybatis框架执行过程:

  1)、配置Mybatis的配置文件,SqlMapConfig.xml(名称不固定)

  2)、通过配置文件,加载Mybatis运行环境,创建SqlSessionFactory会话工厂SqlSessionFactory在实际使用时按单例方式;

  3)、通过SqlSessionFactory创建SqlSession,SqlSession是一个面向用户接口(提供操作数据库方法),实现对象是线程不安全的,建议sqlSession应用场合在方法体内;

  4)、调用SqlSession的方法去操作数据。如果需要提交事务,需要执行SqlSession的commit()方法;

  5)、释放资源,关闭SqlSession。

  4、Spring家族:

三、对比:

  1、Struts2与SpringMVC两种框架对比:

  1)不同之处:

    ①、springmvc和struts2都是负责去转发的,但是两者针对request的请求上面区别很大。

      springmvc是针对于方法级别的请求,也就是一个方法对应于一个请求,属于方法拦截,请求的数据方法不共享;而struts2则时针对一个Action类来进行请求的,即一个Action类对应于一个请求,所以类拦截,请求的数据类共享;

    ②、springmvc入口是一个servlet前端控制器(DispatcherServlet),struts2入口是一个filter过滤器;

    ③、springmvc的配置文件相对struts2来说较为少,容易上手,可以加快软件开发的速度。

  2、Hibernate和Mybatis两种框架对比:

  1)、相同之处:

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

    ②、Hibernate和Mybatis都支持JDBC和JTA事务处理。

  2)、不同之处:

    ①、Hibernate是一种O/R关系型,即完成数据库表和持久化类之间的映射,而Mybatis是针对的SQL-Mapping,个人理解是一种Hibernate把数据库给封装好以后,可以调用相应的数据库操作语句HQL,而Mybatis则是用的原始的数据库操作语句;

    ②、针对高级查询,Mybatis需要手动编写SQL语句,以及ResultMap。而Hibernate有良好的映射机制,开发者无需关心SQL的生成与结果映射,可以更专注于业务流程;

    ③、Hibernate优化起来相对Mybatis较难,而且Hibernate掌握起来相对Mybatis较难,但是Hibernate数据库移植性很好,Mybatis的数据库移植性不好,不同的数据库需要写不同SQL。

四、总结:

  SSM和SSH相同之处在于都是用Spring依赖注入DI来管理各层的组件,并且都是使用面向切面编程AOP来管理事务、日志、权限等。不同之处在于MVC实现方式,以及ORM持久化方面不同(Hibernate与Mybatis)。SSM越来越轻量级配置,将注解开发发挥到极致,且ORM实现更加灵活,SQL优化更简便;而SSH较注重配置开发,其中的Hibernate对JDBC的完整封装更面向对象,对增删改查的数据维护更自动化,但SQL优化方面较弱,且入门门槛稍高。

---------------------
作者:mYunYu
来源:CNBLOGS
原文:https://www.cnblogs.com/mYunYu/p/11401037.html
版权声明:本文为作者原创文章,转载请附上博文链接!
内容解析By:CSDN,CNBLOG博客文章一键转载插件

[转]关于SSH与SSM的组成及其区别的更多相关文章

  1. 关于SSH与SSM的组成及其区别

    前言 当下SpringBoot盛行,咱再聊聊SpringBoot盛行之前的框架组合,当做复习巩固哈. 在聊之前,得先说说MVC,MVC全名是Model View Controller,是模型(mode ...

  2. SSH和SSM的区别

    一怒成仙 博客园 首页 新随笔 联系 管理 订阅 随笔- 54  文章- 1  评论- 0    SSH(Struts,Spring,Hibernate)和SSM(SpringMVC,Spring,M ...

  3. SSH和SSM对比总结

    当下流行的两种企业开发MVC开源框架,是我们Java程序猿必备知识能力.MVC,即模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界 ...

  4. [转]SSH和SSM对比总结

    原文地址:https://blog.csdn.net/peak_and_valley/article/details/52925032 当下流行的两种企业开发MVC开源框架,是我们Java程序猿必备知 ...

  5. ssh跟ssm的区别

    SSH跟SSM的区别 SSH指的是:spring+Struts+hibernate:而SSM指的是:spring +SpringMVC + MyBatis. 1.Spring是是开源框架,是轻量级的I ...

  6. SSH和SSM的比较

    当下流行的两种企业开发MVC开源框架,是我们Java程序猿必备知识能力.MVC,即模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界 ...

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

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

  8. SSH和SSM对比(一)

    当下流行的两种企业开发MVC开源框架,是我们Java程序猿必备知识能力.MVC,即模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界 ...

  9. Java Web J2EE下的两大框架SSH和SSM对比

    当下流行的两种企业开发MVC开源框架,是我们Java程序猿必备知识能力.MVC,即模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界 ...

随机推荐

  1. C#和JS交互 WebBrowser实例

    本文实现了WebBrowser的简单例子 1.引用System.Windows.Froms.dll 2.引用WindowsFormsIntegration.dll 代码如下: public parti ...

  2. python学习笔记08-- socket编程

    本节内容: 一.网络基础知识 二.socket概念及相关语法 2.1socket概念 2.2socket解释 2.3socket模块功能介绍 2.4socket粘包问题 2.5Socket多并发 一. ...

  3. 移动项目到centos中运行报错:failed to open stream: Permission denied

    这是文件夹没有读写权限的错误: (注意:TP5.0权限给runtime文件夹就行了,官方文档在安装tp5的方法中有介绍到权限问题) 在需要赋予权限的文件夹的前一级输入: chmod -R 文件夹名字

  4. JS对HTML实体字符转义和反转义

    一.名词解释 HTML实体字符: 由于在HTML中有些符号是预留的,比如在html中不能直接使用尖括号(‘<’或‘>’),会被误认为标签符号.所以需要通过HTML实体字符去进行替换: HT ...

  5. spring-cloud-zuul跨域问题解决

    问题发现 正常情况下,跨域是这样的: 1. 微服务配置跨域+zuul不配置=有跨域问题 2. 微服务配置+zuul配置=有跨域问题 3. 微服务不配置+zuul不配置=有跨域问题 4. 微服务不配置+ ...

  6. hdu3917 最大权闭合图

    题意:有N个城市,M个公司.现在需要建立交通是获得的利益最大.如果2个公司A,B, A修的路为Xa->Ya,B的路为Xb->Yb,如果Ya==Xb,那么这2个公司有关系. 对于每个公司都有 ...

  7. Ceph 之 Background on http frontends

    Background on http frontends -civetweb frontend --thread per connection, requires a lot of threads - ...

  8. 数据人看Feed流-架构实践

    背景 Feed流:可以理解为信息流,解决的是信息生产者与信息消费者之间的信息传递问题.我们常见的Feed流场景有:1 手淘,微淘提供给消费者的首页商品信息,用户关注店铺的新消息等2 微信朋友圈,及时获 ...

  9. Win10系统使用Docker安装oracle并通过Navicat for oracle进行登录

    一.安装Docker Linux系统可以直接采用命令进行Docker安装: Win7系统安装Dokcer实际通过Boot2Docker在Windows下安装一个VirtualBox来实现: Boot2 ...

  10. LightOJ 1370 Bi-shoe and Phi-shoe【欧拉函数 && 质数】

    题目链接: http://lightoj.com/login_main.php?url=volume_showproblem.php?problem=1370 题意: 给定值,求满足欧拉值大于等于这个 ...