浅谈Spring MVC知识

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

1.mvc框架

(1)介绍

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

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

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

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

(2)原理图

 

 

2.Spring MVC框架

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

 

 

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

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

HandlerExecutionChain源码:app

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文件。

相关文章
相关标签/搜索