jsp调用controller方法_SpringMVC五大核心组件及调用过程

2023-11-07

Spring Web MVC 五大核心组件

DispatcherServlet 控制器入口 负责分发请求

HandlerMapping 负责根据请求 找到对应的控制器

Controller 真正处理请求的控制器

ModelAndView 封装数据信息和视图信息的

ViewResolver 视图处理器 通过处理找到对应的页面

DispatcherServlet

DispatcherServlet是前置控制器,配置在web.xml文件中的。拦截匹配的请求,Servlet拦截匹配规则要自己定义,把拦截下来的请求,依据相应的规则分发到目标Controller来处理,是配置spring MVC的第一步。

DispatcherServlet是前端控制器设计模式的实现,提供Spring Web MVC的集中访问点,而且负责职责的分派,而且与Spring IoC容器无缝集成,从而可以获得Spring的所有好处。

HandlerMapping

HandlerMapping 是处理器映射,它的作用是请求派发,负责请求和控制器建立对应的关系。它是由 DispatcherServlet 调用,DispatcherServlet 会从容器中取出所有 HandlerMapping 实例并遍历,让 HandlerMapping 实例根据自己实现类的方式去尝试查找 Handler。也就是说,DispatcherServlet要将一个请求交给哪个特定的Controller,它需要咨询一个Bean,这个Bean的名字为“HandlerMapping”。

Controller

控制器,负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View 进行展示。

ModelAndView

封装数据信息和视图信息的模型。使用ModelAndView类用来存储处理完后的结果数据,以及显示该数据的视图。从名字上看ModelAndView中的Model代表模型,View代表视图,这个名字就很好地解释了该类的作用。业务处理器调用模型层处理完用户请求后,把结果数据存储在该类的model属性中,把要返回的视图信息存储在该类的view属性中,然后让该ModelAndView返回该Spring MVC框架。框架通过调用配置文件中定义的视图解析器,对该对象进行解析,最后把结果数据显示在指定的页面上。

ViewResolver

视图解析器,ViewResolver 的主要作用是把一个逻辑上的视图名称解析为一个真正的视图。

五大组件的关系

DispatcherServlet收到请求后,依据HandlerMapping的配置,调用相应的Controller来处理,Controller将处理结果封装成ModelAndView对象,返回给DispatcherServlet,DispatcherServlet依据ViewResolver的解析,调用相应的视图对象,(如jsp)来生成相应的页面。

一言概之,request请求到中央控制器——>传到映射处理器——>转发到指定controller——>获取数据和view ,组成成ModelAndView组件——>通过ViewResolver返回到特定的前台页面。

SpringMVC原理

请求到来时,第一个接受这个请求的前端控制器叫DispatcherServlet(这个需要在web.xml中配置),后端控制器叫Controller。负责处理请求URL和后端控制器映射的叫HandMapping,它有多种类型,比较灵活,也是在一个xml文件上进行配置。负责业务逻辑处理的模型对象一般也是我们平常写的DAO/DTO组件。只是它最后的返回更灵活,Controller返回一个ModelAndView对象给DispatcherServlet,ModelAndView可以携带一个视图对象,也可以携带一个视图对象的逻辑名。如果携带的是一个视图对象的逻辑名,那DispatcherServlet需要一个ViewResolver来查找用于渲染回应的视图对象。最后,DispatcherServlet将请求分派给ModelAndView对象指定的视图对象。视图对象负责渲染返回给客户的回应。

更具体的工作流程是:

①当用户在浏览器中点击一个链接或者提交一个表单时,那么就会产生一个请求(request)。当请求离开浏览器时,它会携带用户请求的信息(比如说请求的URL信息,用户名,密码什么的)。

②请求的第一站到达的是Spring的DispatcherServlet,它是一个前端控制器,工作是将用户的请求委托给其他的组件(这里是交给Spring MVC的控制器)去处理。这里DispatcherServlet要决定将请求传给哪一个控制器(Controller)去处理,那么这时就需要处理器映射(Handler Mapping)了。处理器映射会看请求的URL信息,然后决定将请求交给哪一个控制器去处理。比如说有两个控制器ControllerA和ControllerB,分别处理后缀名为.html和.jsp送来的请求,那么当请求者的后缀名为.html时,那么DispatcherServlet就将请求交给ControllerA进行处理。

③当选择了一个合适的控制器后,DispatcherServlet就会将请求交给这个控制器去处理。在这个控制器上,用户的请求将会将用户提交的一些信息交由控制器处理并等待。然而设计的比较好的控制器本身对信息做很少的处理或者根本不做处理,而是将业务逻辑交给一个或多个服务器对象(Model)去处理。

④当控制器对用户请求所携带的信息进行处理(或交给模型层处理)后,经常会产生一些其他的需要返回给浏览器进行显示的数据。这些原始数据直接显示出来显然是不友好的,那么就需要视图(View)来对这些数据进行显示了。控制器的最后一件事就是将模型数据打包,并且指定产生输出的视图的特定名称,然后它将模型、视图名称以及request请求一起发送给DispatcherServlet。所以控制器并没有与视图进行耦合,因为传递给DispatcherServlet的视图名称并不是某一个指定的特殊的文件名称(如后缀名一定是JSP或其他什么名称),它只要是一个可以产生输出和展示结果的逻辑名称就可以了。

⑤DispatcherServlet会向一个视图解析器(ViewResolver)进行请求,视图解析器可以将逻辑视图名称映射到一个特定的视图显示文件上面。

⑥现在DispatcherServlet知道哪一个视图文件可以显示结果了。该视图将会利用模板数据产生输出,这些输出通过response对象返回给客户端进行显示。

来源: https://www. tuicool.com/articles/Yr 6fEnz
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jsp调用controller方法_SpringMVC五大核心组件及调用过程 的相关文章

  • ROS激光SLAM导航理解

    ROS激光SLAM导航理解 注 最近学习ROS的激光导航知识 需要理清ROS的SLAM 环境感知 costmap 与导航算法 为防止自己忘记 将觉得有价值的内容收集于此 对AGV来说 SLAM是个大大坑 环境感知和局部运动控制也是大坑 学习
  • 数据库添加/删除/修改 表字段(超详细)

    Oracle 添加 删除 修改 表字段 超详细 1 添加表字段 1 1 语法结构 1 2 举例说明 1 新建学生信息表 该步骤可忽略 2 初始表样子 3 语法解释 2 修改表字段 2 1 语法结构 1 修改字段属性 2 修改字段名 2 2
  • games101课程作业,在Vs2019环境下的配置环境(不使用虚拟机)

    为什么不使用虚拟机 因为虚拟机使用ubuntu x64版本系统 是一个从未接触过的系统 不好使用 虚拟机中无法使用中文输入法 无法对代码进行注释 不利于学习 虚拟机性能差 打开两三个文件就卡 令人抓狂 要使用终端进行编译 很是麻烦 还是喜欢
  • 面试经典-不被忽略的@property

    我们都知道 property是用来声明属性的 可以保存类的状态或信息 而与其相关的内容 诸如copy weak 深拷贝等 经常会在面试的过程中出现 接下来深入下这些模糊 熟悉的内容 理理顺 内容概要 1 property的本质 2 自动合成
  • Profinet 的交互流程

    Profinet 的交互流程 启动过程 在启动Profinet IO设备时 在设置IP地址之前 使用DCP协议 该协议类似于DHCP协议 PLC发送DCP广播消息 Identify 子网上的所有IO设备都使用本身的MAC地址进行应答 PLC
  • 机器学习算法与Python实践之(六)二分k均值聚类

    机器学习算法与Python实践之 六 二分k均值聚类 zouxy09 qq com http blog csdn net zouxy09 机器学习算法与Python实践这个系列主要是参考 机器学习实战 这本书 因为自己想学习Python 然
  • 基于IDEA的Java学生管理系统

    1 创建学生类 package studentManager public class Student 定义成员变量 private String num 学号 private String name 姓名 private String a
  • 善用Linux内核中的各种数据结构和算法

    1 介绍 在数据结构和算法一文中经常就信手拈来一些基本数据结构和算法 如链表 队列 栈 二叉树等等 但是在C的标准库中并没有自带这些 C 通过STL 类程序库等等会带这些 那么在嵌入式开发里面怎么快速方便使用这些数据结构和算法咧 答案就是从
  • OpenGL 理解GL_TRIANGLE_STRIP等绘制三角形序列的三种方式

    OpenGL 理解GL TRIANGLE STRIP等绘制三角形序列的三种方式 2012 04 12 20 19 19389人阅读 评论 7 收藏 举报 GL TRIANGLE STRIP绘制三角形方式很多时候令人疑惑 在这里对其运作机理进
  • 【Java基础·Comparator多字段排序】

    Java基础 Comparator多字段排序 需求 对指定List按照 身份证号 姓名 入学时间倒序排列 版本1 package com biaogexf tools import lombok Data import java util
  • 游戏开发unity杂项知识系列:GameObject组件的SetActive、active、activeSelf与activeInHierarchy

    SetActive 控制物体的显示状态 SetActive true 物体设置为可显示状态 但是仍然依赖上层的显示状态 上层显示状态为可显示才能显示 SetActive false 物体设置为不可显示状态 active 在某个版本后已经弃用
  • Python标准库----random

    目录 一 简单认识random模块 二 本人对计算机中 随机 伪随机数 的理解和认识 三 random模块的常用方法 1 random seed 2 其余一些常用方法 四 参考文献 一 简单认识random模块 Python官网的解释 该模
  • SASS用法指南

    学过CSS的人都知道 它不是一种编程语言 你可以用它开发网页样式 但是没法用它编程 也就是说 CSS基本上是设计师的工具 不是程序员的工具 在程序员眼里 CSS是一件很麻烦的东西 它没有变量 也没有条件语句 只是一行行单纯的描述 写起来相当
  • 基于DC-DC的PWM控制器simulink仿真,包括abc转dq,PI控制器等

    目录 1 算法仿真效果 2 MATLAB源码 3 算法概述 1 引言 2 基本原理 2 1 脉宽调制 PWM
  • [C# 开发技巧系列] 使用C#操作幻灯片

    本专题概要 引言 实现思路 遥控幻灯片程序的实现 小结 一 引言 记得老师讲课的时候 经常会用PPT遥控翻页笔来遥控幻灯片来给我们讲课 当时觉得非常有趣 由于这段时间接触了VSTO相关的开发 了解到了Office的相关产品都公开了一些API
  • 三菱m80润滑参数_三菱第四轴的开通及设定

    M70与M80 均是标配第四轴功能的 不需要开通选项功能 a 开通第四轴功能 1002 4按下急停按钮 点击机台关机电源 关闭机床总电源 再开启机床总电源 再开机 b 定义第四轴名称 1013 A 第四轴名称为A c 格式化 使上述参数设定
  • Qt中的线程详解

    概述 在多核时代 CPU 的主频已经进入瓶 颈 另辟蹊径地提高程序运行效率就是使用线程 充分利用多核的优势 线程可以看做是 轻量级进程 线程即可以由操作系统管理 也可以由应用程序管 1 为什么要使用线程 我们都知道 进程线程的概念是非常重要
  • 如何彻底卸载anaconda3(win10)

    前言 win10 anaconda3 参考文档 anaconda官方删除文档 第一步 找到anaconda的安装文件夹 双击运行Uninstall文件 优点 方便快捷 缺点 无法将anaconda的配置文件删除 第二步 删除anaconda
  • obj、gltf、glb、fbx、b3dm模型项目汇总

    网址 https github com einstein20050430 Fast Quadric Mesh Simplification 项目 Fast Quadric Mesh Simplification master 功能 有损压缩

随机推荐

  • Python实现PPT转化为Word和OCR识别

    文章目录 一 Python安装和卸载库的方法 1 1 安装 1 2 卸载 二 工具 三 将PPT内容转化为Word 3 1 将PPT文本框里的文字转化为Word 3 1 1 需要的库 3 1 2 实现代码 3 1 3 具体解释 3 2将PP
  • 微服务实例构建成 docker 镜像实例

    作者 Linux猿 简介 CSDN博客专家 华为云享专家 Linux C C 云计算 物联网 面试 刷题 算法尽管咨询我 关注我 有问题私聊 欢迎小伙伴们点赞 收藏 留言 目录 一 实验环境 二 制作 jar 二 打包镜像 2 1 编写 D
  • maven deploy -e -U -B 等集成命令

    1 maven的install可以将项目本身编译并打包到本地仓库 这样其他项目引用本项目的jar包时不用去私服上下载jar包 直接从本地就可以拿到刚刚编译打包好的项目的jar包 很灵活 避免每次都需要重新往私服发布jar包的痛苦
  • 【图像处理】索引色 抖色 反锯齿

    图片内容请参考 http www softii com cms article 5560 html 索引色 一些比较老旧的电脑相关硬件和文件格式只能处理 8 位的像素 3 个色频在 8 位的显示设备上所能表现的色彩范围实在是太少了 因此 8
  • linux删除软件

    linux删除软件 删除软件但不删除配置文件 sudo apt get remove softname 同时删除软件包和配置文件 sudo apt get remove purge softname 删除无用依赖包 sudo apt get
  • conda配置深度学习环境常用命令

    在深度学习中 安装完CUDA和cuDNN之后 经常需要创建虚拟环境 将深度学习框架pytorch tensorflow或caffe等安装在虚拟环境中 当深度学习框架有问题的时候 直接把环境删除掉 重新安装 conda中命令有很多 但是在深度
  • 爬虫爬取信息,抓包行为,超详细,附带源码

    爬虫爬取信息 无xpath 带源码 文章目录 爬虫爬取信息 无xpath 带源码 前言 操作步骤 1 在python中下载必要的库 2 完善运行环境 3 在网页中寻找到资源 4 写代码 5 结果展示 总结 前言 爬虫利用requests 库
  • Kubernetes 入门&进阶实战-转

    写在前面 笔者今年 9 月从端侧开发转到后台开发 第一个系统开发任务就强依赖了 K8S 加之项目任务重 排期紧 必须马上对 K8S 有概念上的了解 然而 很多所谓 K8S 入门 概念 的文章看的一头雾水 对于大部分新手来说并不友好 经历了几
  • kali Linux外网渗透控制Android安卓手机系统。

    免责声明 本文所介绍的内容仅做学习交流使用 严禁利用文中技术进行非法行为 否则造成一切严重后果自负 简介 Kali Linux的前身是BackTrack Linux发行版 Kali Linux是一个基于Debian的Linux发行版 它被认
  • 机器阅读理解相关论文汇总

    一 综述 1 Emergent Logical Structure in Vector Representations of Neural Readers 二 论文 1 Learning Recurrent Span Representat
  • EduCoder Java程序设计---Java面向对象(第八章) - 文件类答案

    第1关 创建文件 package step1 import java io File import java io FileFilter import java io IOException import java util Scanner
  • k8s基础11——安全控制之RBAC用户授权、RBAC用户组授权、SA程序授权

    文章目录 一 K8s安全框架 1 1 鉴权 1 1 1 HTTPS证书认证 1 1 2 HTTP Token认证 1 2 授权 1 3 准入控制 1 4 集群四大角色 二 RBAC给用户授权 TLS 2 1 签发客户端证书 2 2 生成ku
  • 使用Java的File类实现目录拷贝

    目录 准备工作 Case Analysis 代码实现 总结 准备工作 首先 我们来熟悉下File类 在 Java 中 File 类是 java io 包中唯一代表磁盘文件本身的对象 也就是说 如果希望在程序中操作文件和目录 则都可以通过 F
  • otsu算法_OTSU算法详解

    OTSU是阈值分割中一种常用的算法 它可以根据图像自动生成最佳分割阈值 OTSU的核心思想是类间方差最大化 OTSU算法详解 令 表示一幅大小为 像素的数字图像中的 个不同的灰度级 表示灰度级为 的像素数 图像中的像素总数为 像素的灰度级为
  • VS2017序列号

    趁着这两天微软发布了Visual Studio 2017 安装体验了这个史上最强IDE最新版 分享一下自己的安装过程 下载地址点击这里 该版本堪称史上最大IDE 随便勾了几个选项 就要占用几十个GB的安装空间 最后果断选择了最小安装包 只要
  • uniapp中单选按钮的实现

    标签说明 radio group 单项选择器 内部由多个
  • Java核心技术卷 学习Day02

    java学习 复习 本文主要参照 Java核心技术卷 作为学习对象 第四章 对象与类 1 类 面向对象程序设计OOP 类 封装实例字段 方法 类 gt 继承 is a 依赖 uses a 聚合 has a gt 类 2 预定义类 Math
  • JAVA---抽象类和接口基础知识详解(及两者异同点)

    在本篇博客中将介绍JAVA里抽象类和接口的基础知识以及两者的异同点 在有继承和多态的基础知识上学习会更好 目录 抽象类基础知识 抽象类的定义 创建等基础 抽象类的几点说明 一 为何使用抽象方法 抽象类的几点说明 二 接口基础知识 接口的定义
  • 【Zotero高效知识管理】(1)Zotero介绍

    Zotero高效知识管理 专栏其他文章 Zotero文献管理软件的系统性教程 包括安装 全面的配置 基于众多插件的文献导入 管理 引用 笔记方法 Zotero高效知识管理 2 Zotero的安装 百度云存储配置及常用插件安装 Zotero高
  • jsp调用controller方法_SpringMVC五大核心组件及调用过程

    Spring Web MVC 五大核心组件 DispatcherServlet 控制器入口 负责分发请求 HandlerMapping 负责根据请求 找到对应的控制器 Controller 真正处理请求的控制器 ModelAndView 封