企业开发流行的两大MVC开源框架,是我们Java程序员必备的知识和能力。MVC,模型(model)-视图(view)-controller(控制器)的缩写,是一种软件设计模型。它采用业务逻辑、数据、界面展示分离的方式组织代码,将业务逻辑聚集到一个组件中。在内部,在改进和个性化界面和用户交互的同时,无需重写业务逻辑。该框架之所以受欢迎,是因为它易于复用,简化开发。本质在于理念。如果我们掌握了核心思想,那么我们掌握其他类似的框架就没有问题了。建议大家有精力的话还是看一下框架的源码,尤其是spring。SSH和SSM定义SSH通常是指Struts2作为控制器,spring管理各层组件,hibernate负责持久层。SSM是指SpringMVC作为控制器,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询问请求是否需要调用一个Action4,如果ActionMapper决定需要调用一个Action,FilterDispatcher将请求的处理交给ActionProxy5,通过ConfigurationManager查询框架的配置文件,找到需要调用的Action类;6.ActionProxy创建一个ActionInvocation实例。7.ActionInvocation实例使用命名模式Call,调用Action的过程前后,involves相关拦截器(Intercepter)的调用。8.一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常(但不总是)是,可能是另一个Action链)一个需要表示的JSP或FreeMarker模板。9、返回处理结果给客户端2、SpringMVC实现原理SpringMVC框架执行步骤(SpringMVC使用Servlet嵌入):1、客户端向web服务器发送http请求,web服务器解析http请求。如果匹配到DispatcherServlet的请求映射路径(在web.xml中指定),Web容器将请求转发给DispatcherServlet.2。DispatcherServlet收到请求后,会根据请求的信息(包括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通过模型解析出ModelAndView()中的参数进行解析,最终显示完整的视图返回给客户端。对比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本身提供的缓存机制并不好。update操作不能指定刷新指定记录,会清空整张表,但也可以使用第三方缓存。Hibernate封装性好,屏蔽了数据库差异,自动生成SQL语句,处理数据库变化能力弱,SQL语句优化难度大。MyBatis只是实现了SQL语句和对象的映射,需要针对具体的数据库编写SQL语句。具有很强的应对数据库变化的能力,更方便优化SQL语句。综上所述,SSM和SSH的区别主要在于MVC实现方式和ORM持久化方式(Hiibernate和Mybatis)。SSM配置越来越轻量,使得注解开发更好,ORM实现更灵活,SQL优化更容易;而SSH更注重配置开发,其中Hiibernate更面向对象对JDBC的完整封装,可以增删改查,数据维护更自动化,但SQL优化较弱,入门门槛低稍微高点。
