【北京】 IT技术人员面对面试、跳槽、升职等问题,如何快速成长,获得大厂入门资格和升职加薪的筹码?与大厂技术大牛面对面交流,解答你的疑惑。《从职场小白到技术总监成长之路:我的职场焦虑与救赎》活动链接:码客

前言

熟悉当下流行的两种企业开发MVC开源框架,是Java程序猿必备知识。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中的配置找到对应的返回结果。返回结果通常是(但不总是,也可 能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版

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

2.SpringMVC 的原理


SpringMVC框架执行过程:

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

2、DipatcherServlet接收到这个请求之后将根据请求的信息(包括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();//打开Sesssion

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

6.persistent operate持久化操作

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

8.关闭Session

9.关闭SesstionFactory

4、MyBatis原理


MyBatis框架执行过程:

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

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

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

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

5、释放资源,关闭SqlSession

Struts2和SpringMVC两种框架对比

1.springmvc和struts2都是负责取转发的,但是两者针对request的请求上面区别很大。springmvc是针对于方法级别的请求的,也就是一个方法对应于一个请求,属于方法拦截,请求的数据方法不共享;而struts2则是针对一个Action类来进行请求的,即一个Action类对应于一个请求,所以类拦截,请求的数据类共享

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

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

Hibernate 和 MyBatis 两种框架对比

相同之处

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

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

不同之处

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

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

3.Hibernate优化起来相对MyBitas较难,而且Hibernate掌握起来相对MyBitas较难,但是Hibernate数据库移植性很好,MyBatis的数据库移植性不好,不同的数据库需要写不同SQL

Spring家族:

三、总结

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

(想自学习编程的小伙伴请搜索圈T社区,更多行业相关资讯更有行业相关免费视频教程。完全免费哦!)

解析SSH和SSM两大框架的组成及其区别相关推荐

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

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

  2. 深度对比学习Vue和React两大框架

    作为国内应用最广的两个框架,Vue 和 React 是前端必须掌握的内容,也是面试的重点.但大多数读者都只擅长其中一个框架,当面试涉及到另一个框架的内容时,就答不好了. 比如虚拟dom,两个框架中都有 ...

  3. SSH、SSM三种框架及表示层、业务层和持久层的理解

    Struts(表示层)+Spring(业务层)+Hibernate(持久层) SSH:Struts(表示层)+Spring(业务层)+Hibernate(持久层) Struts:Struts是一个表示 ...

  4. # 代码约架?Vue.js和Binding.scala两大框架作者的PK

    作为一个知乎小透明,最近看了一场炸鱼大片.两天前,民工叔因为 Teambition 是 React 技术栈而离职 一文,引发了激烈的讨论.其中民工叔偏向的技术选型Vue.js的作者出没现场黑了一把An ...

  5. java webwork_Java两大框架的碰撞:Struts2与Webwork的对比

    从某种程度上来看,Struts 2是WebWork的升级,而不是Struts 1的升级,甚至在Apache的Struts 2的官方文档都提到:WebWork到Struts 2是一次平滑的过渡.实际上, ...

  6. ssm(springmvc4+spring4+mybatis3)整合实战-个人博客系统-整合各大框架

    ssm(springmvc4+spring4+mybatis3)整合实战-个人博客系统-整合各大框架 ssm框架整合开发实战,这一篇我将介绍如何实现各大框架的整合. 上一篇博客,我介绍了web.xml ...

  7. Java Web框架对比SSH和SSM

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

  8. Spring5 新增的两大功能,吹一波这个框架!

    Spring经过这么多年的发展,已经成为既定的企业级J2EE标准,其最大的优点即是轻量级和其最核心的IOC容器.Spring5新增了这样两大功能,比如: SpringMVC:支持servlet4.0. ...

  9. BigData之Hadoop:Hadoop框架(分布式系统基础架构)的简介(两大核心【HDFS存储和MapReduce计算】)、深入理解、下载、案例应用之详细攻略

    BigData之Hadoop:Hadoop框架(分布式系统基础架构)的简介(两大核心[HDFS存储和MapReduce计算]).深入理解.下载.案例应用之详细攻略 目录 Hadoop的简介(分布式系统 ...

  10. SSH与SSM框架的差别

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

最新文章

  1. 全浏览器兼容的DIV拖动效果
  2. DOS命令编译JAVA程序
  3. 【项目实战】P2P金融数据指标分析
  4. c 语言登录系统源代码,c语言源代码---------------个人图书管理系统
  5. python列表应用案例-python列表使用实例
  6. 【已解决】清除linux系统的多余引导
  7. teamviewer 可用设备上限_2020:抚州办公楼采暖设备种类齐全
  8. 怎么将一个数字高低位互换_多彩数字 多彩童年——东城幼儿园玩具研究教学案例...
  9. java unsafe 详解_Java CAS操作与Unsafe类详解
  10. 如何解决ado.net entity framework的使用,再别的调用项目中依然正常
  11. redis介绍、主从配置
  12. mysql5.6无法安装_windows下Mysql5.6的安装
  13. 电子元器件封装知识大全(内含AD封装库下载资料)
  14. javascript电子书下载
  15. 零基础入门AI量化交易学习笔记
  16. 数学分析教程(第三版)读后感
  17. 电脑桌面的计算机图双击打不开,win10双击电脑图标打不开必须右键打开
  18. 如何在服务器替换apk文件,如何修改apk文件的服务器地址
  19. Fastqc安装运行(jdk安装)
  20. 一个简单的BitTorrent客户端实现(六):peer manager和peer实现

热门文章

  1. 财务女,30岁无情被辞:想给财务提个醒!!
  2. OSChina 周五乱弹 ——我们测算过无数代码却依旧算不准没钱的这一生
  3. office2012产品密钥
  4. java微信h5支付_Java-实现微信H5支付
  5. 有限元法 matlab,MATLAB有限元分析与应用.pdf
  6. YOLO3的一些理解
  7. NB-IoT的优势是什么?
  8. python调用nmap扫描全端口_python nmap 扫描服务器端口
  9. matlab信号分析与处理:时域分析
  10. php拾取当前经纬度,获取中国各省市区县经纬度的方法