文章插图
前言熟悉当下流行的两种企业开发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
【解析SSH和SSM两大框架的组成及其区别】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持久化操作
推荐阅读
- 与人类最接近的动物是 动物和人类的相似之处
- 制茶的过程和工序
- JavaScript 中的位运算和权限设计
- 怎么捕获和记录SQL Server中发生的死锁?
- 梦见小偷进家偷走了钱和手机 梦见小偷进家偷走了钱财
- 孙俪离了婚是真的吗 邓超被爆出轨已和孙俪正式离婚
- 做梦梦见和男朋友分手又和好 做梦梦见和男朋友分手了和别人在一起了
- 正月初六是一月六号吗2022,正月和一月一样吗
- 川和月饼迎中秋 秋月莲香享好礼
- 如何区分乳腺和肿块呢?