【Spring原理进阶】SpringMVC调用链+JSP模板应用讲解
🎉🎉欢迎光临🎉🎉
🏅我是苏泽,一位对技术充满热情的探索者和分享者。🚀🚀
🌟特别推荐给大家我的最新专栏《Spring 狂野之旅:底层原理高级进阶》 🚀
本专栏纯属为爱发电永久免费!!!
这是苏泽的个人主页可以看到我其他的内容哦👇👇
努力的苏泽
http://suzee.blog.csdn.net/
本文简单讲解了一下SpringMVC的调用链,讲解其原理 和servlet容器交互的过程,以及比较重要的JSP模板映射的过程,主要的作用就是把一堆干巴巴的数据 变成一份精美的可视化的视图,并且简单高效,希望对大家有帮助!
目录
为什么调用链对于理解Spring MVC至关重要
故事背景:坤坤饭店
解释调用链的定义和作用
HTTP请求的到达:从浏览器到Servlet容器
探索Spring MVC如何与Servlet容器进行交互
DispatcherServlet:Spring MVC的核心
讨论DispatcherServlet如何处理请求并将其分发到适当的处理器
JSP模板应用实战示例:
首先要引入jsp 模板引擎
为什么调用链对于理解Spring MVC至关重要
调用链对于理解业务流程和请求处理的关系非常重要。在一个典型的业务场景中,可以将调用链视为请求在不同组件之间传递的过程,每个组件负责执行特定的任务。下面用一个弱智的小故事解释他们之间的关系
故事背景:坤坤饭店
在一个小镇的中心,有一家古老而有名的饭店,名字叫做"坤坤"。这家饭店以其出色的厨师团队和创意的特色菜吸引了众多食客。然而,这家饭店的成功并不仅仅依赖于美食,还有一个关键的因素,那就是无缝的协调和组织。
解释调用链的定义和作用
调用链是指一系列环节的有序执行,每个环节都处理特定的任务,并将结果传递给下一个环节。在坤坤饭店的背景中,调用链是确保饭店运营顺利的关键。每个环节都扮演着重要的角色,就像饭店中的不同工作人员一样。
HTTP请求的到达:从浏览器到Servlet容器
在坤坤饭店中,我们假设顾客通过浏览器发送HTTP请求,以点菜为例。让我们看看这个过程的基本流程:
- 顾客在浏览器中输入饭店的网址,并点击菜单页面上的菜品。
- 浏览器将发送HTTP请求到饭店的Servlet容器。
- Servlet容器接收到请求,并根据URL映射将请求发送给相应的处理器。
这个过程中涉及到了多个环节,每个环节都有其特定的功能和责任。这种有序的执行过程就是调用链的体现。
探索Spring MVC如何与Servlet容器进行交互
在坤坤饭店中,Spring MVC框架扮演了一个重要的角色,它与Servlet容器进行交互,以处理和分发请求。让我们看看Spring MVC是如何与Servlet容器进行交互的:
- 当Servlet容器接收到HTTP请求后,它将请求交给DispatcherServlet处理。
- DispatcherServlet是Spring MVC框架的核心,它负责协调整个请求处理过程。
- DispatcherServlet根据配置信息和URL映射,将请求分发给适当的处理器。
通过这种方式,Spring MVC框架与Servlet容器紧密合作,确保请求能够被正确处理和分发。
DispatcherServlet:Spring MVC的核心
DispatcherServlet是Spring MVC框架的核心组件,它负责协调整个请求处理过程。它有以下的作用和功能:
- 接收HTTP请求并将其传递给适当的处理器。
- 调用处理器执行业务逻辑并获取处理结果。
- 根据处理结果选择合适的视图进行渲染。
- 将渲染后的视图返回给客户端。
DispatcherServlet的处理流程是一个典型的调用链,每个环节都有特定的职责,并将结果传递给下一个环节。这种有序的执行确保了请求的正确处理和响应。
讨论DispatcherServlet如何处理请求并将其分发到适当的处理器
在坤坤饭店中,DispatcherServlet就像是饭店的总指挥部,负责协调各种组件之间:
-
控制器处理请求:控制器(Controller)是业务逻辑的处理中心,它根据请求的类型和参数执行相应的操作。例如,控制器可能会调用商品服务来获取商品信息。
-
服务层处理业务逻辑:服务层(Service)包含了业务逻辑的具体实现。在这个例子中,商品服务可能会从数据库中查询商品信息并返回给控制器。
-
控制器返回模型和视图:控制器接收到信息后,将其放入一个模型对象中,并选择一个合适的视图来渲染。模型对象包含了要在视图中显示的数据。这里的模板就是预先设定好的模板文件,就像这样
<!DOCTYPE html> <html> <head><title>Example</title> </head> <body><h1>${title! "Default Title"}</h1><p>${message! "Default Message"}</p> </body> </html> -
视图解析和渲染:视图解析器根据配置的规则找到对应的视图,并将模型中的数据填充到视图中。视图可能是一个HTML模板或其他类型的视图技术。
-
返回响应给客户端:DispatcherServlet将生成的视图返回给客户端,客户端收到响应后显示在浏览器中。
JSP模板应用实战示例:
首先要引入jsp 模板引擎
在Maven中添加
<dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version>
</dependency>
接下来,你需要在Spring MVC配置文件中配置视图解析器,将JSP作为视图技术。假设你使用的是XML配置方式,可以在配置文件中添加以下内容:
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/views/"/> <!-- 模板文件存放的路径 --><property name="suffix" value=".jsp"/> <!-- 模板文件的文件扩展名 -->
</bean>
上述配置将会将JSP视图解析为/WEB-INF/views/目录下的JSP文件。
接下来,你可以在该目录下创建一个JSP模板文件,例如book.jsp,其中可以使用JSP标签和表达式来插入动态数据:下面就是一个简单的文章的模板
<!DOCTYPE html>
<html>
<head><title>Example</title>
</head>
<body><h1>${title != null ? title : "Default Title"}</h1><p>${message != null ? message : "Default Message"}</p>
</body>
</html>
在控制器中,你可以从数据库中获取数据,并将其存储在模型(Model)中,然后将模型传递给视图:
@Controller
public class ExampleController {@Autowiredprivate bookService bookService;@RequestMapping("/getBook")public String getBook(Model model) {ExampleData exampleData = bookService.getDataFromDatabase(); // 从数据库获取数据model.addAttribute("title", bookData.getTitle()); // 将数据存入模型model.addAttribute("message", bookData.getMessage());return "book"; // 返回视图名称}
}
在上面的示例中,bookeController是一个控制器类,通过@RequestMapping注解将请求映射到/getbook路径。在getBook方法中,你可以调用bookService来获取数据库中的数据,并将数据存储在模型中,使用model.addAttribute方法将数据添加到模型中。最后,返回视图名称"book",它将被视图解析器解析为对应的JSP模板文件。
相关文章:
【Spring原理进阶】SpringMVC调用链+JSP模板应用讲解
🎉🎉欢迎光临🎉🎉 🏅我是苏泽,一位对技术充满热情的探索者和分享者。🚀🚀 🌟特别推荐给大家我的最新专栏《Spring 狂野之旅:底层原理高级进阶》 🚀…...
23种计模式之Python/Go实现
目录 设计模式what?why?设计模式:设计模式也衍生出了很多的新的种类,不局限于这23种创建类设计模式(5种)结构类设计模式(7种)行为类设计模式(11种) 六大设计原则开闭原则里氏替换原…...
Qt可视化大屏布局
科技大屏现在非常流行,这里分享一下某个项目的大屏布局(忘了源码是哪个博主的了) 展示 这个界面整体是垂直布局,分为两个部分,标题是一个部分,然后下面的整体是一个layout布局,为另外一部分。 l…...
re:从0开始的CSS之旅 14. 显示模式的切换
1. 两个属性 display 属性可以用于转换元素的显示模式 可选值: block 转换为块元素 inline 转换为行内元素 inline-block 转换为行内块元素 none 不显示元素,并且不占用元素的位置 visibility 属性用于设置元素是否显示 可选值: visible 显示…...
K8S系列文章之 [Alpine基础环境配置]
用户手册:Alpine User Handbook 官方WIKI:Alpine Linux WIKI 安装 安装的实际逻辑是通过 setup-alpine 脚本去调用其他功能的脚本进行配置,可以通过 vi 查看脚本。如果某个部分安装失败,可退出后单独再次执行。通过镜像文件&a…...
单页404源码
<!doctype html> <html> <head> <meta charset"utf-8"> <title>简约 404错误页</title><link rel"shortcut icon" href"./favicon.png"><style> import url("https://fonts.googleapis.co…...
MySQL-运维
一、日志 1.错误日志 错误日志是MySQL中最重要的日志之一,它记录了当mysql启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关性息。当数据库出现任何故障导致无法正常使用时,建议首先查看此日志。 该日志是默认开启的…...
Waymo数据集下载与使用
在撰写论文时,接触到一个自动驾驶数据集Waymo Dataset 论文链接为:https://arxiv.org/abs/1912.04838v7 项目链接为:https://github.com/waymo-research/waymo-open-dataset 数据集链接为:https://waymo.com/open waymo提供了两种…...
蓝桥杯每日一题----素数筛
素数筛 素数筛的作用是筛选出[2,N]范围内的所有素数,本次主要讲解两种方法,分别是埃氏筛和欧拉筛。证明时会提到唯一分解定理,如果不知道的小伙伴可以先去学一学,那我们开始啦! 1.埃氏筛 主要思想:当找到…...
20240212请问如何将B站下载的软字幕转换成为SRT格式?
20240212请问如何将B站下载的软字幕转换成为SRT格式? 2024/2/12 12:47 百度搜索:字幕 json 转 srt json srt https://blog.csdn.net/a_wh_white/article/details/120687363?share_token2640663e-f468-4737-9b55-73c808f5dcf0 https://blog.csdn.net/a_w…...
《CSS 简易速速上手小册》第6章:高级 CSS 技巧(2024 最新版)
文章目录 6.1 使用 CSS 变量进行设计:魔法配方的调配6.1.1 基础知识6.1.2 重点案例:创建可定制的主题6.1.3 拓展案例 1:响应式字体大小6.1.4 拓展案例 2:使用 CSS 变量创建动态阴影效果 6.2 calc(), min(), max() 等函数的应用&am…...
2024-02-11 多进程、多线程 work
1. 创建一个多进程服务器和多线程服务器 a. 多进程 #include<myhead.h> #define PORT 9999 //端口号 #define IP "192.168.125.113" //IP地址//定义信号处理函数,用于回收僵尸进程 void handler(int signo) {if(signo S…...
详解结构体内存对齐及结构体如何实现位段~
目录 编辑 一:结构体内存对齐 1.1对齐规则 1.2.为什么存在内存对齐 1.3修改默认对齐数 二.结构体实现位段 2.1什么是位段 2.2位段的内存分配 2.3位段的跨平台问题 2.4位段的应用 2.5位段使用的注意事项 三.完结散花 悟已往之不谏,知来者犹可…...
Linux网络编程——tcp套接字
文章目录 主要代码关于构造listen监听accepttelnet测试读取信息掉线重连翻译服务器演示 本章Gitee仓库:tcp套接字 主要代码 客户端: #pragma once#include"Log.hpp"#include<iostream> #include<cstring>#include<sys/wait.h…...
【计算机网络】协议层次及其服务模型
协议栈(protocol stack) 物理层链路层网络层运输层应用层我们自顶向下,所以从应用层开始探究应用层 协议 HTTP 提供了WEB文档的请求和传送SMTP 提供电子邮件报文的传输FTP 提供两个端系统之间的文件传输报文(message)是…...
prometheus之redis_exporter部署
下载解压压缩包 mkdir /opt/redis_exporter/ cd /opt/redis_exporter/ wget http://soft.download/soft/linux/prometheus/redis_exporter/redis_exporter-v1.50.0.linux-amd64.tar.gz tar -zxvf redis_exporter-v1.50.0.linux-amd64.tar.gz ln -s /opt/redis_exporter/redis_…...
js 解构赋值
搬运:JavaScript系列之解构赋值_js解构赋值-CSDN博客...
Vivado用ILA抓波形保存为CSV文件
将ILA观察到的波形数据捕获为CSV文件,抓10次,把文件合并,把源文件删除 运行方法:Vivado的 Tcl console 窗口输入命令 set tcl_dir F:/KLD_FPGA/Code/sim set tcl_filename TCL_ILA_TRIG_V1.2.tcl source $tcl_dir/$tcl_filenam…...
微软AD域替代方案,助力企业摆脱hw期间被攻击的窘境
在红蓝攻防演练(hw行动)中,AD域若被攻击成功,是其中一个扣分最多的一项内容。每年,宁盾都会接到大量AD在hw期间被攻击,甚至是被打穿的企业客户。过去,企业还会借助2FA双因子认证加强OA、Exchang…...
Git教程I
Git教程I 本地Git创建git仓库将修改存到暂存区将暂存区提交到当前分支查看提交历史回退版本恢复到更晚的版本创建新分支切换分支简单的分支合并冲突分支合并不使用fast forward: --no-ff 远程Git连接远程仓库将本地分支上传到远程仓库从远程仓库拉取 本地Git 学习如何使用本地…...
基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...
淘宝扭蛋机小程序系统开发:打造互动性强的购物平台
淘宝扭蛋机小程序系统的开发,旨在打造一个互动性强的购物平台,让用户在购物的同时,能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机,实现旋转、抽拉等动作,增…...
redis和redission的区别
Redis 和 Redisson 是两个密切相关但又本质不同的技术,它们扮演着完全不同的角色: Redis: 内存数据库/数据结构存储 本质: 它是一个开源的、高性能的、基于内存的 键值存储数据库。它也可以将数据持久化到磁盘。 核心功能: 提供丰…...
Sklearn 机器学习 缺失值处理 获取填充失值的统计值
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 使用 Scikit-learn 处理缺失值并提取填充统计信息的完整指南 在机器学习项目中,数据清…...
