zoukankan      html  css  js  c++  java
  • 浅谈Spring MVC知识

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

  • 相关阅读:
    反向代理实例
    nginx常用命令和配置
    nginx的安装
    Can Live View boot up images acquired from 64bit OS evidence?
    What is the behavior of lnk files?
    EnCase v7 search hits in compound files?
    How to search compound files
    iOS 8.3 JB ready
    Sunglasses
    现代福尔摩斯
  • 原文地址:https://www.cnblogs.com/javJoker/p/10486142.html
Copyright © 2011-2022 走看看