当前位置: 首页 > news >正文

【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请求,以点菜为例。让我们看看这个过程的基本流程:

  1. 顾客在浏览器中输入饭店的网址,并点击菜单页面上的菜品。
  2. 浏览器将发送HTTP请求到饭店的Servlet容器。
  3. Servlet容器接收到请求,并根据URL映射将请求发送给相应的处理器。

这个过程中涉及到了多个环节,每个环节都有其特定的功能和责任。这种有序的执行过程就是调用链的体现。

探索Spring MVC如何与Servlet容器进行交互

在坤坤饭店中,Spring MVC框架扮演了一个重要的角色,它与Servlet容器进行交互,以处理和分发请求。让我们看看Spring MVC是如何与Servlet容器进行交互的:

  1. 当Servlet容器接收到HTTP请求后,它将请求交给DispatcherServlet处理。
  2. DispatcherServlet是Spring MVC框架的核心,它负责协调整个请求处理过程。
  3. DispatcherServlet根据配置信息和URL映射,将请求分发给适当的处理器。

通过这种方式,Spring MVC框架与Servlet容器紧密合作,确保请求能够被正确处理和分发。

DispatcherServlet:Spring MVC的核心

DispatcherServlet是Spring MVC框架的核心组件,它负责协调整个请求处理过程。它有以下的作用和功能:

  1. 接收HTTP请求并将其传递给适当的处理器。
  2. 调用处理器执行业务逻辑并获取处理结果。
  3. 根据处理结果选择合适的视图进行渲染。
  4. 将渲染后的视图返回给客户端。

DispatcherServlet的处理流程是一个典型的调用链,每个环节都有特定的职责,并将结果传递给下一个环节。这种有序的执行确保了请求的正确处理和响应。

讨论DispatcherServlet如何处理请求并将其分发到适当的处理器

在坤坤饭店中,DispatcherServlet就像是饭店的总指挥部,负责协调各种组件之间:

  1. 控制器处理请求:控制器(Controller)是业务逻辑的处理中心,它根据请求的类型和参数执行相应的操作。例如,控制器可能会调用商品服务来获取商品信息。

  2. 服务层处理业务逻辑:服务层(Service)包含了业务逻辑的具体实现。在这个例子中,商品服务可能会从数据库中查询商品信息并返回给控制器。

  3. 控制器返回模型和视图:控制器接收到信息后,将其放入一个模型对象中,并选择一个合适的视图来渲染。模型对象包含了要在视图中显示的数据。这里的模板就是预先设定好的模板文件,就像这样

    <!DOCTYPE html>
    <html>
    <head><title>Example</title>
    </head>
    <body><h1>${title! "Default Title"}</h1><p>${message! "Default Message"}</p>
    </body>
    </html>

     

  4. 视图解析和渲染:视图解析器根据配置的规则找到对应的视图,并将模型中的数据填充到视图中。视图可能是一个HTML模板或其他类型的视图技术。

  5. 返回响应给客户端: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模板应用讲解

&#x1f389;&#x1f389;欢迎光临&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;特别推荐给大家我的最新专栏《Spring 狂野之旅&#xff1a;底层原理高级进阶》 &#x1f680…...

23种计模式之Python/Go实现

目录 设计模式what?why?设计模式&#xff1a;设计模式也衍生出了很多的新的种类&#xff0c;不局限于这23种创建类设计模式&#xff08;5种&#xff09;结构类设计模式&#xff08;7种&#xff09;行为类设计模式&#xff08;11种&#xff09; 六大设计原则开闭原则里氏替换原…...

Qt可视化大屏布局

科技大屏现在非常流行&#xff0c;这里分享一下某个项目的大屏布局&#xff08;忘了源码是哪个博主的了&#xff09; 展示 这个界面整体是垂直布局&#xff0c;分为两个部分&#xff0c;标题是一个部分&#xff0c;然后下面的整体是一个layout布局&#xff0c;为另外一部分。 l…...

re:从0开始的CSS之旅 14. 显示模式的切换

1. 两个属性 display 属性可以用于转换元素的显示模式 可选值&#xff1a; block 转换为块元素 inline 转换为行内元素 inline-block 转换为行内块元素 none 不显示元素&#xff0c;并且不占用元素的位置 visibility 属性用于设置元素是否显示 可选值&#xff1a; visible 显示…...

K8S系列文章之 [Alpine基础环境配置]

用户手册&#xff1a;Alpine User Handbook 官方WIKI&#xff1a;Alpine Linux WIKI 安装 安装的实际逻辑是通过 setup-alpine​ 脚本去调用其他功能的脚本进行配置&#xff0c;可以通过 vi 查看脚本。如果某个部分安装失败&#xff0c;可退出后单独再次执行。通过镜像文件&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中最重要的日志之一&#xff0c;它记录了当mysql启动和停止时&#xff0c;以及服务器在运行过程中发生任何严重错误时的相关性息。当数据库出现任何故障导致无法正常使用时&#xff0c;建议首先查看此日志。 该日志是默认开启的&#xf…...

Waymo数据集下载与使用

在撰写论文时&#xff0c;接触到一个自动驾驶数据集Waymo Dataset 论文链接为&#xff1a;https://arxiv.org/abs/1912.04838v7 项目链接为&#xff1a;https://github.com/waymo-research/waymo-open-dataset 数据集链接为&#xff1a;https://waymo.com/open waymo提供了两种…...

蓝桥杯每日一题----素数筛

素数筛 素数筛的作用是筛选出[2,N]范围内的所有素数&#xff0c;本次主要讲解两种方法&#xff0c;分别是埃氏筛和欧拉筛。证明时会提到唯一分解定理&#xff0c;如果不知道的小伙伴可以先去学一学&#xff0c;那我们开始啦&#xff01; 1.埃氏筛 主要思想&#xff1a;当找到…...

20240212请问如何将B站下载的软字幕转换成为SRT格式?

20240212请问如何将B站下载的软字幕转换成为SRT格式&#xff1f; 2024/2/12 12:47 百度搜索&#xff1a;字幕 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 变量进行设计&#xff1a;魔法配方的调配6.1.1 基础知识6.1.2 重点案例&#xff1a;创建可定制的主题6.1.3 拓展案例 1&#xff1a;响应式字体大小6.1.4 拓展案例 2&#xff1a;使用 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地址//定义信号处理函数&#xff0c;用于回收僵尸进程 void handler(int signo) {if(signo S…...

详解结构体内存对齐及结构体如何实现位段~

目录 ​编辑 一&#xff1a;结构体内存对齐 1.1对齐规则 1.2.为什么存在内存对齐 1.3修改默认对齐数 二.结构体实现位段 2.1什么是位段 2.2位段的内存分配 2.3位段的跨平台问题 2.4位段的应用 2.5位段使用的注意事项 三.完结散花 悟已往之不谏&#xff0c;知来者犹可…...

Linux网络编程——tcp套接字

文章目录 主要代码关于构造listen监听accepttelnet测试读取信息掉线重连翻译服务器演示 本章Gitee仓库&#xff1a;tcp套接字 主要代码 客户端&#xff1a; #pragma once#include"Log.hpp"#include<iostream> #include<cstring>#include<sys/wait.h…...

【计算机网络】协议层次及其服务模型

协议栈&#xff08;protocol stack&#xff09; 物理层链路层网络层运输层应用层我们自顶向下&#xff0c;所以从应用层开始探究应用层 协议 HTTP 提供了WEB文档的请求和传送SMTP 提供电子邮件报文的传输FTP 提供两个端系统之间的文件传输报文&#xff08;message&#xff09;是…...

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 解构赋值

搬运&#xff1a;JavaScript系列之解构赋值_js解构赋值-CSDN博客...

Vivado用ILA抓波形保存为CSV文件

将ILA观察到的波形数据捕获为CSV文件&#xff0c;抓10次&#xff0c;把文件合并&#xff0c;把源文件删除 运行方法&#xff1a;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期间被攻击的窘境

在红蓝攻防演练&#xff08;hw行动&#xff09;中&#xff0c;AD域若被攻击成功&#xff0c;是其中一个扣分最多的一项内容。每年&#xff0c;宁盾都会接到大量AD在hw期间被攻击&#xff0c;甚至是被打穿的企业客户。过去&#xff0c;企业还会借助2FA双因子认证加强OA、Exchang…...

Git教程I

Git教程I 本地Git创建git仓库将修改存到暂存区将暂存区提交到当前分支查看提交历史回退版本恢复到更晚的版本创建新分支切换分支简单的分支合并冲突分支合并不使用fast forward: --no-ff 远程Git连接远程仓库将本地分支上传到远程仓库从远程仓库拉取 本地Git 学习如何使用本地…...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

【2025年】解决Burpsuite抓不到https包的问题

环境&#xff1a;windows11 burpsuite:2025.5 在抓取https网站时&#xff0c;burpsuite抓取不到https数据包&#xff0c;只显示&#xff1a; 解决该问题只需如下三个步骤&#xff1a; 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人&#xff0c;点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置&#xff0c;详见说明文档 成功后&#xff0c;记录Webhook 2 API文档说明 点击设置说明 查看自…...