概述:

SpringMVC:是基于spring的一个框架, 实际上就是spring的一个模块, 专门是做web开发的。
                      理解是servlet的一个升级

SpringMVC就是一个Spring。
Spring是容器,ioc能够管理对象,使用<bean>, @Component, @Repository, @Service, @Controller
SpringMVC能够创建对象, 放入到容器中(SpringMVC容器), springmvc容器中放的是控制器对象

我们要做的是:

  1. 使用@Contorller创建控制器对象
  2. 把对象放入到springmvc容器中
  3. 把创建的对象作为控制器使用
  4. 这个控制器对象能接收用户的请求, 显示处理结果,就当做是一个servlet使用。
  5. 使用@Controller注解创建的是一个普通类的对象, 不是Servlet。 springmvc赋予了控制器对象一些额外的功能。

web开发底层是servlet , 而SpringMVC的框架是在servlet基础上面加入一些功能,做web开发方便。
springmvc中有一个对象是Servlet : DispatherServlet(中央调度器)
DispatherServlet: 负责接收用户的所有请求, 用户把请求给了DispatherServlet
之后DispatherServlet把请求转发给我们的Controller对象, 最后是Controller对象处理请求。

流程:

index.jsp-----DispatherServlet(Servlet)----转发,分配给—Controller对象(@Controller注解创建的对象)
main.jsp                                                                                MainController
addUser.jsp                                                                         UserController

处理流程:

1)发起some.do
2)tomcat(web.xml–url-pattern知道 *.do的请求给DispatcherServlet)
3)DispatcherServlet(根据springmvc.xml配置知道 some.do—doSome())
4)DispatcherServlet把some.do转发个MyController.doSome()方法
5)框架执行doSome()把得到ModelAndView进行处理, 转发到show.jsp

上面的过程简化的方式
some.do—DispatcherServlet—MyController

执行过程源代码分析:

  1. tomcat启动,创建容器的过程
    通过load-on-start标签指定的1,创建DisaptcherServlet对象,
    DisaptcherServlet它的父类是继承HttpServlet的, 它是一个serlvet, 在被创建时,会执行init()方法。
    在init()方法中
    //创建容器,读取配置文件
    WebApplicationContext ctx = new ClassPathXmlApplicationContext(“springmvc.xml”);
    //把容器对象放入到ServletContext中
    getServletContext().setAttribute(key, ctx);

上面创建容器作用: 创建@controller注解所在的类的对象, 创建MyController对象,
这个对象放入到 springmvc的容器中, 容器是map , 类似 map.put(“myController”,MyController对象)

  1. 请求的处理过程
    1)执行servlet的service()
    protected void service(HttpServletRequest request, HttpServletResponse response)
    protected void doService(HttpServletRequest request, HttpServletResponse response)
    DispatcherServlet.doDispatch(request, response){ 调用MyController的.doSome()方法 }

    doDispatch:springmvc中DispatcherServlet的核心方法, 所有的请求都在这个方法中完成的。

  2. WEB-INF目录下的数据,用户是无法访问的

流程图:


执行流程:
(1)浏览器提交请求到中央调度器
(2)中央调度器直接将请求转给处理器映射器。
(3)处理器映射器会根据请求,找到处理该请求的处理器,并将其封装为处理器执行链后返回给中央调度器。
(4)中央调度器根据处理器执行链中的处理器,找到能够执行该处理器的处理器适配器。
(5)处理器适配器调用执行处理器。
(6)处理器将处理结果及要跳转的视图封装到一个对象 ModelAndView 中,并将其返回给处理器适配器。
(7)处理器适配器直接将结果返回给中央调度器。
(8)中央调度器调用视图解析器,将 ModelAndView 中的视图名称封装为视图对象。
(9)视图解析器将封装了的视图对象返回给中央调度器
(10)中央调度器调用视图对象,让其自己进行渲染,即进行数据填充,形成响应对象。
(11)中央调度器响应浏览器。

【SpringMVC】概述相关推荐

  1. SpringMVC概述

    SpringMVC 概述 Spring 为展现层提供的基于 MVC 设计理念的优秀的 Web 框架,是目前最主流的 MVC 框架之一 Spring3.0 后全面超越 Struts2,成为最优秀的 MV ...

  2. 三层架构和SpringMVC概述

    目录 一.关于三层架构和MVC 1.三层架构 (1)表现层 (2)业务层 (3)持久层 2.MVC 模型 3.经典三层架构和MVC的关系 二.SpringMVC 概述 1.SpringMVC的优势 2 ...

  3. SpringMVC简介-SpringMVC概述

    SpringMVC 是一种基于 Java 的实现 MVC 设计模型的请求驱动类型的轻量级 Web 框架,属于SpringFrameWork 的后续产品,已经融合在 Spring Web Flow 中. ...

  4. SpringMVC框架----SpringMVC 概述

    1.SpringMVC 是什么 SpringMVC 是一种基于 Java 的实现 MVC 设计模型的请求驱动类型的轻量级 Web 框架,属于 Spring FrameWork 的后续产品,已经融合在 ...

  5. 1.SpringMVC 概述

    SpringMVC 简介 SpringMVC 也叫 Spring web mvc ,属于表现层的框架.SpringMVC 是 Spring框架的一部分,是在Spring3.0后发布的 第一个Sprin ...

  6. SpringMVC——MVC思想、前端控制器、SpringMVC概述、编写第一个SpringMVC程序

    目录 一.什么是MVC 二.前端控制器(中心控制器) 1.什么是前端控制器 2.前端控制器原理 三.什么是SpringMVC 1.SpringMVC简介 2.SpringMVC和Struts2 四.S ...

  7. 《SpringMVC从入门到放肆》一、概述

    一.SpringMVC概述 View Service Dao DB Spring MVC interface interface Mysql impls impls SpringMVC也叫Spring ...

  8. SpringMVC 框架系列之初识与入门实例

    微信公众号:compassblog 欢迎关注.转发,互相学习,共同进步! 有任何问题,请后台留言联系! 1.SpringMVC 概述 (1).什么是 MVC:Model-View-Control Co ...

  9. SpringMVC-学习笔记04【SpringMVC返回值类型及响应数据类型】

    Java后端 学习路线 笔记汇总表[黑马程序员] SpringMVC-学习笔记01[SpringMVC概述及入门案例][day01] SpringMVC-学习笔记02[参数绑定及自定义类型转换] Sp ...

  10. SpringMVC-学习笔记03【SpringMVC常用注解】

    Java后端 学习路线 笔记汇总表[黑马程序员] SpringMVC-学习笔记01[SpringMVC概述及入门案例][day01] SpringMVC-学习笔记02[参数绑定及自定义类型转换] Sp ...

最新文章

  1. python实现DES算法
  2. 爬虫 spider02——详析http
  3. LeetCode 410——分割数组的最大值
  4. spring源代码系列(一)sring源代码编译 spring源代码下载 spring源代码阅读
  5. 寻路基本工具类定义 AIDefine.cpp
  6. golang 包含文本_Golang教程之Web篇(七)
  7. resultset 的指针报错原因
  8. paramiko学习笔记
  9. 关于SQL中的两个问题的理解
  10. 《前端之路》之 JavaScript 高级技巧、高阶函数(一)
  11. OpenGL超级宝典(第7版)笔记22 原子计数器 清单5.31-5.34
  12. C语言知识点总结2022
  13. matlab二重定积分_怎么用matlab计算这个二重积分如何用matlab求二重积分
  14. 自考本科计算机要学什么,计算机自考本科需要考哪些科目
  15. 微软将与美国第二大杂货连锁店展开合作 以抵抗亚马逊
  16. 动手写一个探测网络质量(丢包率/RTT/队形等)的工具
  17. 一文带你轻松了解什么是 LSL, LSR, ASL, ASR, ROL, ROR?
  18. 真牛,大神将Windows 10改造成Windows XP(EXPERIENCE Freestyle)
  19. X32汇编AAA,AAS,AAM,AAD,DAS,DAA
  20. Oracle11安装(安装包+图文讲解)

热门文章

  1. 加速mysql导入时间_加快mysql导入导出速度
  2. 《将要淘汰的八种人》读后感
  3. cuda安装教cudnn安装显卡问题
  4. [转载]Tensorflow 的reduce_sum()函数的axis,keep_dim这些参数到底是什么意思?
  5. LeetCode简单题之杨辉三角
  6. 激光雷达数据到云cloud
  7. 单目摄像头检测6D姿态
  8. 2021年大数据HBase(十二):Apache Phoenix 二级索引
  9. 2021年大数据常用语言Scala(二十):函数式编程 介绍
  10. python可视化来分析全国疫情