关于MVC框架,我相信大家都不陌生,都会说也就是模型-视图-控制器这三层的框架结构,如果你参加面试的时候考官会问:“MVC框架是什么?你说一说。”其实我们都知道这个问题还需要问的,只要你是一个开发人员,都知道MVC框架是什么,考官会问什么呢?他会问:“你了解Spring MVC的工作原理吗?你给我说一说。”可能这个时候有些人还不知道Sring MVC的工作原理是什么?现在我就浅谈一下,读者看了之后这篇文章之后,如果觉得有什么地方写的不对,希望大家给我指出来,毕竟相互学习,才能更近一步。闭门造车,只会原地踏步,我也是查看了一些资料之后。在说Spring MVC的相关知识之前,我们先来谈一谈MVC三层框架结构的知识。

1.mvc框架

(1)介绍

MVC也就是模型-视图-控制器(Model-View-Controller)架构模式的开发模型,实现了模型和视图的彻底分离,结构清晰。

Model(模型)是用于处理业务逻辑的部分。所以在开发的时候我们把业务逻辑放在Model层,这样可以提高业务逻辑的复用,代码量也会相应的减少。对于数据库而言往往还存在事务的机制,为了适应这样的变化,设计者会把模型层再细分为两层,即服务层( Service )和数据访问层( DAO )

View(视图)是用于从Model层中返回回来的Beand对象进行数据处理显示的部分,通过视图解析器来进行处理的,通常视图是依据模型数据创建的。

Controller(控制器)是用于处理用户交互的部分。控制器负责从客户端传过来的Request请求中读取数据,控制用户输入,并向Model模型发送数据。

(2)原理图

2.Spring MVC框架

流程和组件是SpringMVC 的核心, SpringMVC的流程是围绕DispatcherServlet 而工作的,所以在Spring MVC 中DispatcherServlet 就是其最重要的内容。

(1)客户端的所有请求都交给前端控制器DispatcherServlet来处理,它会负责调用系统的其他模块来真正处理用户的请求。

(2)DispatcherServlet收到请求后,将根据请求的信息(包括URL、HTTP协议方法、请求头、请求参数、Cookie等),通过HandlerMapping机制找到处理该请求的控制器(或其方法)进行响应。只是通过HandlerMapping 返回的是一个HandlerExecutionChain 对象。

HandlerExecutionChain源码:

package org.springframework.web.servlet ;
/**** imports ****/
public class HandlerExecutionChain {// 日志private static final Log logger = LogFactory.getLog(HandlerExecutionChain.class);// 处理器private final Object handler;// 拦截器数组
    @Nullableprivate HandlerInterceptor[] interceptors;// 拦截器列表
    @Nullableprivate List<HandlerInterceptor> interceptorList;// 拦截器当前下标private int interceptorIndex = -1;....
}

(3)HandlerAdapter是一个适配器,它用统一的接口对HandlerExecutionChain对象中所包含的处理器进行调用。

(4)Handler完成对用户请求的处理后,会返回一个ModelAndView对象给DispatcherServlet.

(5) ModelAndView的视图是逻辑视图,DispatcherServlet还要借助ViewResolver视图解析器完成从逻辑视图到真实视图对象的解析工作。

(6)当得到真正的视图对象后,DispatcherServlet会利用视图对象对模型数据进行渲染。

(7)客户端得到响应,可能是一个普通的HTML页面,也可以是XML或JSON字符串,还可以是一张图片或者一个PDF文件。

转载于:https://www.cnblogs.com/javJoker/p/10486142.html

浅谈Spring MVC知识相关推荐

  1. 浅谈 Spring IOC

    浅谈 Spring IOC 什么是IOC 理解 IOC 和 DI Spring IOC 相关操作个人总结 什么是IOC Ioc-Inversion of Control,即"控制反转&quo ...

  2. 浅谈:Spring Boot原理分析,切换内置web服务器,SpringBoot监听项目(使用springboot-admin),将springboot的项目打成war包

    浅谈:Spring Boot原理分析(更多细节解释在代码注释中) 通过@EnableAutoConfiguration注解加载Springboot内置的自动初始化类(加载什么类是配置在spring.f ...

  3. 由openSession、getCurrentSession和HibernateDaoSupport浅谈Spring对事物的支持

    由openSession.getCurrentSession和HibernateDaoSupport浅谈Spring对事物的支持 Spring和Hibernate的集成的一个要点就是对事务的支持,op ...

  4. 浅谈Spring IOC和DI及Spring工厂类

    浅谈Spring IOC和DI及Spring的工厂类 文章目录 浅谈Spring IOC和DI及Spring的工厂类 一. IOC 1.什么是IOC 2.为什么使用IOC 传统开发模式的弊端 3. 使 ...

  5. 浅谈Spring定时任务

    浅谈Spring定时任务 三种定时任务基于原理 多定时任务并发配置 动态定时任务 定时任务Demo 三种定时任务基于原理 SpringBoot配置定时任务主要有Spring Schedule.JDK自 ...

  6. 浅谈Spring IOC的理解

    浅谈Spring IOC的理解 学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊 ...

  7. 浅谈 Spring IOC和AOP

    浅谈 Spring IOC和AOP IOC 控制反转 以前创建对象的主动权和时机是由于自己把握的,现在将这种权利转移到Spring容器中,并且根据配置文件去创建对象管理对象 ioc的注入方式有三种:构 ...

  8. 浅谈Spring发展史

    1 码农的春天----------Spring来了 Spring官网 :http://www.springframework.org 关于Spring的发展起源要回溯到2002年,当时正是Java E ...

  9. 浅谈Spring的Bean生命周期和作用域

    学习spring有一段时间了.有的人说Spring的发展就是Java的发展,Spring就是Java的半壁江山,而且AOP思想更是OOP思想的一种扩展和延申.所以今天来浅谈一下spring的生命周期和 ...

最新文章

  1. Linux Systemcall Int0x80方式、Sysenter/Sysexit Difference Comparation
  2. python os.popen()方法(用于从一个命令打开一个管道)
  3. 一个比较牛的Js写的五子棋
  4. HarmonyOS之分布式任务调度开发流程
  5. Linux 指令篇:文档编辑--col
  6. centos 安装mysql客户端_linux下mysql的yum源安装/配置/卸载
  7. 生成交叉表的简单通用存储过程
  8. linux搭建博客Day1
  9. 浅析JDK,JRE,JVM的区别
  10. Java编程思想目录
  11. MacOS Big Sur 11.5.1 (20G80) OC 0.7.1 / Cl 5138 / PE 三分区原版黑苹果镜像
  12. Thinkpad L430无法识别Trackpoint解决方案
  13. oracle实时备份归档日志实现异机恢复丢失数据最小化
  14. python中单引号双引号三引号_python中单引号双引号三引号
  15. 语音识别中声学模型训练过程-GMM(一)
  16. 高老师的架构设计_隽语集(CC_1051)
  17. 华住证券损失通知书:Rosen Law Firm宣布针对华住酒店集团提起证券集体诉讼和参加集体诉讼的重要截止日期
  18. Compact set,紧集,闭集,开集
  19. 城乡投票源码php_PHP微信公众号投票活动系统源码 独立版
  20. python杨辉三角解释_python杨辉三角

热门文章

  1. 配置虚拟机Ubuntu网络连接
  2. 仅通过SQL备份文件将MOSS服务器场及所有网站数据迁移到新的一台服务器上
  3. 使用 jQuery 简化 Ajax 开发.
  4. hadoop程序开发--- Java
  5. Python 批量修改图片
  6. 这两天发现一个老外用JavaScript编写的好东西:dp.SyntaxHighlighter。
  7. 精益设计: 设计团队如何改善用户体验
  8. 跟我一起学编程—《Scratch编程》第21课:打地鼠
  9. nginx+keepalived双机热备
  10. 高级打字机【主席树】【滚动数组】【块状链表】