白发戴花君莫笑,岁月从不败美人。 愿,像你我一如既往地好看。

上一章简单介绍了MyBatis的pageHelper分页插件的使用(十五),如果没有看过,请观看上一章。

这节主要是牵扯到SpingMVC的理论知识,不太理解这一块,故参考了黑马视频关于SpringMVC 的课堂笔记。

SpringMVC 是Spring FrameWork 的其中一个模块,如果不了解Spring 的话,可以观看老蝴蝶以前写的Spring系列知识。

Spring的"两个蝴蝶飞,你好"的简单开发(一)](https://blog.csdn.net/yjltx1234csdn/article/details/89284325)。

一. MVC 模式(传统 JSP+Servlet)

MVC 是Web 开发中常用的一种设计模式, MVC 指的是 Model(模型), View(视图) Controller( 控制器)。

在使用框架之前,也就是之前的 JSP+Servlet 时代时,
MVC 的常常使用是:

执行流程可以简单理解为:

  1. 用户发送请求,如 user/list     查询员工的所有列表
  2. 控制器进行接收, 控制器是Servlet 提供的, 通过在web.xml 中进行配置 servlet 器
<servlet><servlet-name>userServlet</servlet-name><servlet-class>com.yjl.servlet.UserServlet</servlet-class></servlet><servlet-mapping><servlet-name>userServlet</servlet-name><url-pattern>/user</url-pattern></servlet-mapping>

来达到 根据 /user 可以 来找到对应的UserServlet 这个模型类。 可以通过传参如 method=list 来确定找的是list() 这个方法。

3 . 在模型 Model 层中, 通过持久化 查询数据库 dao 来找到集合,如List<User> 将数据结果封装到 JavaBean 里面。

4 . 在Model 中,通过request, 或者是response 进行相应的转发和重定向 来到达视图 list.jsp

     request.setAttribute("userList",userList);request.getRequestDispatcher("/user/list.jsp").forward(request,reponse);

5 . 在视图中, 将userList 进行遍历解析,展示在jsp 页面上。

6 . jsp 页面进行响应,返回给浏览器。 浏览器经过解析,展示在用户。

二. Struts2的 MVC模式

1 . 用户发送请求,如 user/list, 查询员工的所有列表
2 . 控制器进行接收 , 其中控制器是Struts2 提供的,需要在web.xml 中进行相应的配置

 <!-- 配置struts2的过滤器 --><filter><filter-name>struts</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><filter-mapping><filter-name>struts</filter-name><url-pattern>/*</url-pattern></filter-mapping>

并且在struts.xml 配置文件中进行相应的配置,来确定到达的Model 是 UserAction 类,执行的是 list() 的方法。

3 . 在Model 中,查询数据库 dao,封装到JavaBean 里面。 存储到值栈里面。 返回的是 “list” 字符串。

4 . 控制器接收到list, 通过result 进行判断,来准确的知道 返回的是 user/list.jsp 的页面。

5 . 到list.jsp 页面,从值栈中,如通过OGNL 或者是EL 来取出结果,展示在jsp页面上。

6 . 在jsp页面进行响应,返回给浏览器,浏览器经过解析,展示给用户。

这就是Struts2 的基本过程。 具体可以看以前写的Struts2 系列。

三. SpringMVC 的MVC 模式

SpringMVC 是非常有趣的,也是本系列要讲的。

在图片中,有前端控制器, 控制器映射器,控制器适配器, 视图解析器等名词,会慢慢解释这些。

1 . 用户发送请求, 前端控制器 DispatcherServlet 进行接收。 如user/list.action

2 . 前端控制器DispatcherServlet 请求 处理器映射器 HandlerMapping, 根据请求的路径,查找对应的 Handler .

可以根据 xml 查找,也可以根据注解配置查找。

3 . 处理器映射器 查找出来以后,将结果 Handler (是一个处理链) 返回给 DispatcherServlet

4 . 前端控制器 调用 处理器适配器 HandlerAdapter 去执行相应的 Handler, 即第3步的返回结果。

5 . 处理器适配器执行相应的Handler, 如 UserAction , Action 中有相应的业务逻辑,持久化dao等。
6 . Handler 处理完成后,将结果 ModelAndView 返回给处理器适配器
7 . 处理器适配器 将结果ModelAndView 返回给前端控制器, 是第六步的接收结果。 包括Model 数据结果 和View 视图。
8 . 前端控制器 请求视图解析器进行视图解析, 根据逻辑视图名解析成真正的视图(.jsp的形式)
9 . 视图解析器 向前端控制器返回处理后的结果 view 视图。
10 . 前端控制器进行视图渲染,渲染第九步的.jsp页面, 将ModelAndView 中的Model 模型填充到request 域中。
11 . 前端控制器向用户响应结果 。

很多的操作都是由前端控制器来完成的。 幸运的是,SpringMVC 已经提供了这个前端控制器。

其中, 不仅仅是前端控制器, 处理器映射器(HandlerMapping),处理器适配器(HandlerAdapter),视图解析器(ViewResolver) 均不需要程序员自己开发, 我们只需要写 Handler 和对应的View 视图即可。

谢谢!!!

SpringMVC的运行流程(一)相关推荐

  1. SpringMVC总结-SpringMVC的运行流程以及简单运用

    SpringMVC的入口是DispatcherServlet,可以在web.xml配置DispatcherServlet 的拦截URL的表达式.下面对SpringMVC的运行流程做具体的说明 一.运行 ...

  2. SpringMvc简略运行流程

    SpringMvc 是一个表现层框架解决,从请求中接收传入的参数,将处理后的结果返回给页面展示. 对于Strust2的流程:用户发送请求,核心控制器strutspreparedandExcuteFil ...

  3. springmvc的运行流程

    流程图: 整体流程: (1)客户端(浏览器)发送请求,直接请求到 DispatcherServlet(前端控制器). (2)DispatcherServlet 根据请求信息调用 HandlerMapp ...

  4. SpringMVC运行流程分析

    一.运行流程图 下面是 SpringMVC 运行流程的分析图,包括了拦截器的调用过程,目标资源的处理以及异常处理. 二.运行流程中的相关组件 在上面的流程图中有几个比较重要的组件,下面大概描述一下其对 ...

  5. MyBatis的架构和其运行流程

    0x00:MyBatis 架构组成 MyBatis 整体的架构组成为:数据源配置文件.SQL 映射配置文件.会话工厂.会话.执行器以及底层封装对象组成. 0x01:数据源配置文件 对于持久层框架,连接 ...

  6. SSM框架中MVC各层的作用以及运行流程

    这篇博文主要介绍的是SSM(Spring.SpringMVC.Mybatis)框架中,MVC各层的作用以及各层之间的交互和框架整体运行流程. 一.MVC各层级间的作用及关系 表现层(springMVC ...

  7. SSM三大框架的运行流程、原理、核心技术详解!

    一.Spring部分 1.Spring的运行流程 第一步:加载配置文件ApplicationContext ac = new ClassPathXmlApplicationContext(" ...

  8. 2021年大数据Hadoop(二十七):YARN运行流程

    全网最详细的Hadoop文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 本系列历史文章 前言 Yarn运行流程 本系列历史文章 2021年大数据Hado ...

  9. HDFS源码分析心跳汇报之BPServiceActor工作线程运行流程

    在<HDFS源码分析心跳汇报之数据结构初始化>一文中,我们了解到HDFS心跳相关的BlockPoolManager.BPOfferService.BPServiceActor三者之间的关系 ...

最新文章

  1. 翻译java_翻译示例代码
  2. 比RNN快136倍!上交大提出SRNN,现在RNN也能做并行计算了
  3. 【开发环境】Mac 中删除 Python ( 删除 Python 框架 | 删除 Python 应用程序 | 删除 Python 链接 )
  4. JS,Jquery获取各种屏幕的宽度和高度
  5. spring整合jdbc
  6. fedora 用安装 DVD 建立本地 yum 源
  7. maven搭建多模块项目和管理
  8. java 左移 返回值_java左移右移运算符详解
  9. [react] React组件的构造函数是必须的吗?
  10. React开发(140):react中ref为dom添加ref
  11. [滑模控制器浅述] (1) 二阶系统的简单滑模控制器设计
  12. 飞行的小鸟(Flybird)C语言小游戏C++简单小程序超简单
  13. VS2017安装教程
  14. PID控制电机输出作为电机PWM占空比输入的理解
  15. 量化交易系统之python+mysql(二)
  16. Mysql中使用逗号隔开多张表生成的表实例
  17. 网易大数据面试题试解
  18. 系统业务逻辑书籍_企业应该如何建立自己的分销系统和分销团队
  19. flink sql 如何upsert 到一张hologres表中
  20. 什么专业的人适合学嵌入式?

热门文章

  1. 开源协议(GPL,LGPL,BSD,MIT,Apache)的说明和选择
  2. 微信小程序自定义组件实现普通页面onShow效果初始化组件内部数据
  3. 关于小程序的生命周期(onload,onshow,onlaunch,onhidden,onReady,onUnload)
  4. 线性回归--乐高玩具价格预测
  5. 艾美捷PD-1体内抗体说明书及相关研究
  6. The Enchanted Forest(思维/前缀和)
  7. Vue通过 Babel 显式转译一个node_modules依赖
  8. Midas中文修正版Up4
  9. 计算机基础win7桌面操作,电脑入门(十一)桌面个性化设置
  10. MYSQL FOR MAC 安装篇