下流行的两种企业开发MVC开源框架,是咱们Java程序猿必备知识能力。MVC,即模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑汇集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不须要从新编写业务逻辑。web
SSH和SSM定义spring
SSH 一般指的是 Struts2 作控制器(controller),spring 管理各层的组件,hibernate 负责持久化层。数据库
SSM 则指的是 SpringMVC 作控制器(controller),Spring 管理各层的组件,MyBatis 负责持久化层。编程
共同点:1.Spring依赖注入DI来管理各层的组件。2.使用面向切面编程AOP管理事物、日志、权限等。缓存
不一样点:1.Struts2 和 SpringMVC 控制器(controller)控制视图和模型的交互机制的不一样,服务器
Struts2是Action类级别,SpringMVC是方法级别,更容易实现RESTful风格。app
SSH 和 SSM 的实现原理框架
Struts2框架执行步骤(Struts2使用Filter嵌入):ide
一、客户端初始化一个指向Servlet容器(例如Tomcat)的请求优化
二、这个请求通过一系列的过滤器(Filter)(这些过滤器中有一个叫作ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其余框架的集成颇有帮助
三、接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请求是否须要调用某个Action
四、若是ActionMapper决定须要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy
五、ActionProxy经过Configuration Manager询问框架的配置文件,找到须要调用的Action类
六、ActionProxy建立一个ActionInvocation的实例。
七、ActionInvocation实例使用命名模式来调用,在调用Action的过程先后,涉及到相关拦截器(Intercepter)的调用。
八、一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果一般是(但不老是,也可 能是另外的一个Action链)一个须要被表示的JSP或者FreeMarker的模版。
九、将处理结果返回给客户端
SpringMVC 的实现原理
SpringMVC框架执行步骤(SpringMVC使用Servlet嵌入):
一、客户端发出一个http请求给web服务器,web服务器对http请求进行解析,若是匹配DispatcherServlet的请求映射路径(在web.xml中指定),web容器将请求转交给DispatcherServlet.
二、DipatcherServlet接收到这个请求以后将根据请求的信息(包括URL、Http方法、请求报文头和请求参数Cookie等)以及HandlerMapping的配置找处处理请求的处理器(Handler)。
3-四、DispatcherServlet根据HandlerMapping找到对应的Handler,将处理权交给Handler(Handler将具体的处理进行封装),再由具体的HandlerAdapter对Handler进行具体的调用。
五、Handler对数据处理完成之后将返回一个ModelAndView()对象给DispatcherServlet。
六、Handler返回的ModelAndView()只是一个逻辑视图并非一个正式的视图,DispatcherSevlet经过ViewResolver将逻辑视图转化为真正的视图View。
七、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家族: