网站首页 > 技术文章 正文
前言
熟悉当下流行的两种企业开发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优化方面较弱,且入门门槛稍高。
如果觉得不错有帮助的,可以转发点赞关注一下。谢谢!
猜你喜欢
- 2025-04-01 阿里腾讯都在用的Restful编码风格
- 2025-04-01 SpringMVC教程1之原理分析及注解方式的使用
- 2025-04-01 从多控阵列到全闪革命:RDMA+NVMe-oF重构高端存储新范式
- 2025-04-01 前置过滤器可编程控制仪:如何优化过滤系统的运行管理?
- 2025-04-01 (十)Spring 面试秘籍:攻克常见难题,轻松拿 offer
- 2025-04-01 为什么大龄程序员更要掌握Spring MVC?从设计哲学看框架生命力
- 2025-04-01 特斯拉的三个区域控制器(Zonal)配置
- 2025-04-01 Spring Framework学习大纲(Spring Framework学习大纲模板)
- 2025-04-01 图灵课堂-Java高级开发工程师(完结)
- 2025-04-01 深入理解Spring MVC的工作原理与源码剖析
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端react (48)
- 前端md5加密 (49)
- 前端路由 (55)
- 前端数组 (65)
- 前端定时器 (47)
- 前端接口 (46)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle约束 (46)
- oracle 中文 (51)
- oracle链接 (47)
- oracle的函数 (57)
- mac oracle (47)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)