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

前言

熟悉当下流行的两种企业开发MVC开源框架,是Java程序猿必备知识。MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写。M是指业务模型,V是指用户界面,C则是控制器。一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑汇集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不须要从新编写业务逻辑。小编在学校的时候学习过SSH,SSM则是去公司后用的。前端

1、SSH 和 SSM 的定义

SSH 一般指的是 Struts2 作前端控制器,Spring 管理各层的组件,Hibernate 负责持久化层。 SSM 则指的是 SpringMVC 作前端控制器,Spring 管理各层的组件,MyBatis 负责持久化层。web

2、SSH 和 SSM 的实现原理

1.Struts2 的原理

Struts2框架执行过程:spring

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

二、这个请求通过一系列的过滤器(Filter)(这些过滤器中有一个叫作ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其余框架的集成颇有帮助,例如:SiteMesh Plugin数据库

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

四、若是ActionMapper决定须要调用某个Action,FilterDispatcher把请求的处理交给ActionProxyapi

五、ActionProxy经过Configuration Manager询问框架的配置文件,找到须要调用的Action类安全

六、ActionProxy建立一个ActionInvocation的实例服务器

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

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

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

2.SpringMVC 的原理

SpringMVC框架执行过程:

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

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

三、DispatcherServlet根据HandlerMapping找到对应的Handler,并返回

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

五、处理器适配器执行Handler

六、Handler对数据处理完成之后将返回一个ModelAndView对象给处理器适配器

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

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

九、视图解析器向前端控制器返回View

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

十一、前端控制器向用户响应结果

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

四、MyBatis原理

MyBatis框架执行过程:

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

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

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

四、调用 sqlSession 的方法去操做数据。若是须要提交事务,须要执行 SqlSession 的 commit() 方法

五、释放资源,关闭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家族:

3、总结

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

相关文章
相关标签/搜索