关于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; // 拦截器数组
@Nullable
private HandlerInterceptor[] interceptors; // 拦截器列表
@Nullable
private 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文件。

浅谈Spring MVC知识的更多相关文章

  1. 浅谈Spring中的Quartz配置

    浅谈Spring中的Quartz配置 2009-06-26 14:04 樊凯 博客园 字号:T | T Quartz是一个强大的企业级任务调度框架,Spring中继承并简化了Quartz,下面就看看在 ...

  2. 浅谈Spring的两种配置容器

    浅谈Spring的两种配置容器 原文:https://www.jb51.net/article/126295.htm 更新时间:2017年10月20日 08:44:41   作者:黄小鱼ZZZ     ...

  3. 开发技术--浅谈python基础知识

    开发|浅谈python基础知识 最近复习一些基础内容,故将Python的基础进行了总结.注意:这篇文章只列出来我觉得重点,并且需要记忆的知识. 前言 目前所有的文章思想格式都是:知识+情感. 知识:对 ...

  4. 浅谈spring——spring MVC(十一)

    springMVC框架主要是围绕DispatcherServlet这个核心展开,它负责拦截请求并将其分派给相应的的处理器处理,然后将结果响应给用户.包括注解驱动控制器.请求及响应信息处理.视图解析.本 ...

  5. 结合源码浅谈Spring容器与其子容器Spring MVC 冲突问题

    容器是整个Spring 框架的核心思想,用来管理Bean的整个生命周期. 一个项目中引入Spring和SpringMVC这两个框架,Spring是父容器,SpringMVC是其子容器,子容器可以看见父 ...

  6. 1.1浅谈Spring(一个叫春的框架)

    如今各种Spring框架甚嚣尘上,但是终归还是属于spring的东西.所以在这里,个人谈一谈对spring的认识,笔者觉得掌握spring原理以及spring所涉及到的设计模式对我们具有极大的帮助.我 ...

  7. 浅谈Spring发展史

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

  8. 扯谈spring mvc之WebApplicationContext的继承关系

    spring mvc里的root/child WebApplicationContext的继承关系 在传统的spring mvc程序里会有两个WebApplicationContext,一个是pare ...

  9. 浅谈Spring(一)

    Spring 框架是一个分层架构,由 7 个定义良好的模块组成.Spring 模块构建在核心容器之上,核心容器定义了创建.配置和管理 bean 的方式. watermark/2/text/aHR0cD ...

随机推荐

  1. luogu 1030 求先序遍历

    此题给出中序遍历和后序遍历后的序列,乍一看确乎想不出法子解决,毕竟是逆向思维: 但是后序遍历的特殊性质 son1,son2,x 使得后序的末尾便是根节点,再由中序天然的递归性质便可递归输出,用下fin ...

  2. OpenCV中MAT中数据类型的设置(转)

    前言 opencv中很多数据结构为了达到內存使用的最优化,通常都会用它最小上限的空间来分配变量,有的数据结构也会因为图像文件格式的关系而给予适当的变量,因此需要知道它们声明的空间大小来配置适当的变量. ...

  3. QDialog对话框

    QDialog对话框,用来实现那些只是暂时存在的用户界面,是独立的窗口,但通常也有父窗口对话框有模态和非模态两种,,非模态对话框的行为和使用方法都类似于普通的窗口,模态对话框则有所不同,当模态对话框显 ...

  4. Django 2.0 学习(12):Django 模板语法

    Django 模板语法 一.模板 只要是在html里面有模板语法就不是html文件了,这样的文件就叫做模板. 二.模板语法 模板语法变量:{{ }} 在Django模板中遍历复杂数据结构的关键是句点字 ...

  5. 免费的馅饼 HYSBZ - 2131 (树状数组维护二维偏序)

    题目链接:https://cn.vjudge.net/problem/HYSBZ-2131 题目大意:中文题目 具体思路:对于任意的两个位置,posA和posB,我们可以如下推导. |posA-pos ...

  6. saltstack系列~第四篇

    简介 针对mysql的sls编写0 软件包推送部分  tool_rsync:     file.recurse:        - source: salt://files/mysql        ...

  7. 【网络编程3】网络编程基础-arp请求(局域网主机扫描)

    ARP协议 ARP(Add ress Resolution Protocol)地址解析协议位于数据链路层,是根据IP地址获取MAC地址的一个协议. ARP 查看指令 arp -a 显示所有接口的当前A ...

  8. eclipse自动添加注释

    自动添加注释 快捷键:alt shift jwindows-->preference Java-->Code Style-->Code Templates code-->new ...

  9. select 不要 用*

    背景 说实在的,这有什么好记录的呢.记录这个有啥用,真是技术人员的吹毛求疵.说起来,就是给人装有用吧.既然记录了,也想个相关的段子吧.曾经有个同事写了个sql,效率极差,来了个女同事,竟然解决了,问题 ...

  10. PL/SQL第三章 基础查询语句

    --查询所有列 select * from tab_name|view_name; SELECT * FROM emp; SELECT * FROM (SELECT * FROM emp); --查询 ...