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

SpringMVC(二)原理

目录

一、配置Maven(为了提升速度)

二、流程&&原理

SpringMVC中心控制器

完整流程:


一、配置Maven(为了提升速度)

在SpringMVC(一)配置-CSDN博客的配置中,导入Maven会非常慢,这是因为里面的一些jar包来自国外。所以在此手动配置一下maven:

1.自行下载apache-maven后将其解压缩到D盘

2.在D:盘目录下创建一个新的空文件夹,命名为maven:

 3.点开项目的【文件】-->【设置】(这里的idea是中文版本的,正常版本应该是【File】-->【setting】):

4.找到构建、执行、部署下面的构建工具中的Maven:

5.点击改变Maven的主路径,选择已经下载好的D:盘apache-maven,然后点击确定。

 6.点击确定成功后,这里就会自动更新成我们创建的maven空文件夹:

 7.点击重写,选择D:盘apache-maven下conf下的logging下的setting.xml,点击确定。

8.完成这些后点击大的确定,回到pom.xml文件刷新,以后再导入依赖或是配置maven文件就更快了。

二、流程&&原理

现在在SpringMVC(一)配置-CSDN博客实现的基础上看一下实现的原理。

首先回忆一下servlet是如何处理合同http请求的:

 http请求打过来,随后根据通过web.xml文件(在eclipse中被注解代替了--这两者本质是一种功能),去到达不同的地址。

而在SpringMVC框架中只是重新使用web.xml文件实现这个功能,在servlet中,web.xml需要去一一映射,但是在SpringMVC框架中,web.xml文件做了一个配置:

通过dispatcherServlet去实现自动请求分发,“/”表示所有,即所有的请求都会打到dispatcherServlet中。

SpringMVC中心控制器

Spring的web框架围绕DispatcherServlet 【servlet调度】设计

DispatcherServlet的作用是将请求发送到不同的处理器

入门案例的执行流程

1. 当启动Tomcat服务器的时候,因为配置了load-on-startup标签,所以会创建DispatcherServlet对象,就会加载springmvc.xml配置文件

2. 开启了注解扫描,那么HelloController对象就会被创建

3. 从index.jsp发送请求,请求会先到达DispatcherServlet核心控制器,根据配置@RequestMapping注解找到

执行的具体方法

4. 根据执行方法的返回值,再根据配置的视图解析器,去指定的目录下查找指定名称的JSP文件

5. Tomcat服务器渲染页面,做出响应

SpringMVC官方提供图形

【这张图⭐--面试】

入门案例中的组件分析

1. 前端控制器(DispatcherServlet)

2. 处理器映射器(HandlerMapping)

3. 处理器(Handler)----一个又一个的方法

4. 处理器适配器(HandlAdapter)

5. 视图解析器(View Resolver)

6. 视图(View)

就着springmvc.xml文件分析一下:

①扫描的其实就是servlet文件,现在打开HelloController看一眼:

 1.Spring创建对象的方式

2.@RequestMapping地址映射

没有标注的时候默认是GET,当然可以通过下面这种方式指定具体是哪个方法。

 3.这里返回"suc",肯定不是一串字符串这么简单,这里面对应的跟显然是前端界面:

那么为什么这里可以以这种格式书写呢? 

这就牵扯到springmvc.xml文件③这一部分了:

前缀是/html/,后缀是.html,所以return时,返回的其实是,/html/suc.html,即一个前端界面。

完整流程:

运行项目时,首先会执行到web.xml文件中的:

即去到index.html文件:

也就是这里:

当点击入门程序时,就会触发这个请求;现在来看这个请求出自哪里:
 前面已经讲过了,这里的return实际上是return了一个html目录下的suc.html文件。

同时从hello.do到return的步骤,这里也是这一步操作(至于为什么不直接到达Handler而是通过处理器适配器---这里可以添加拦截器):

 这里来到suc.html文件,里面有元素显示:

现在来看这里面的msg究竟承载着什么内容,这里将再次回到HelloController文件,可以看见这里面存放的内容是“hello,SpringMVC”。

也就是点击入门程序后,显示(可以看见这里显示的请求路径是“locahost....../hello.do”):

至此,就是目前一个基础的SpringMVC框架和运行的流程,下面的所有使用都将围绕这个原理展开。

相关文章:

SpringMVC(二)原理

目录 一、配置Maven(为了提升速度) 二、流程&&原理 SpringMVC中心控制器 完整流程: 一、配置Maven(为了提升速度) 在SpringMVC(一)配置-CSDN博客的配置中,导入Maven会非…...

Selenium 自动化,如何下载正确的 ChromeDriver

在 Python 的 Selenium 自动化操作中,chromedriver 是不可或缺的驱动程序。没有正确安装对应版本的驱动,运行代码时常常会遇到报错问题,比如 “session not created: This version of ChromeDriver only supports Chrome version XX”。 今天…...

[Linux]redis5.0.x升级至7.x完整操作流程

1. 从官网下载最新版redis: 官网地址:https://redis.io/download 注:下载需要的登录,如果选择使用github账号登录,那么需要提前在github账号中取消勾选“Keep my email addresses private”(隐藏我的邮箱…...

Java字符编码与正则表达式深度解析

Java字符编码与正则表达式深度解析 1. 字符编码发展 1.1 ASCII 码 在计算机最初发明时,主要用于数值计算,但随着计算需求的增加,人们发现计算机可以用来处理文本信息。因此,将字符映射为数字来表示。 字母 ‘A’ 映射为 65&am…...

【C++】B2099 矩阵交换行

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯题目描述题目描述输入格式输出格式输入输出样例输入 #1输出 #1 💯题目分析💯不同解法分析我的做法实现步骤:优点:不足&#…...

论文解读 | NeurIPS'24 IRCAN:通过识别和重新加权上下文感知神经元来减轻大语言模型生成中的知识冲突...

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 点击 阅读原文 观看作者讲解回放! 作者简介 史丹,天津大学博士生 内容简介 大语言模型(LLM)经过海量数据训练后编码了丰富的世界知识。最近的研究表明&#xff0c…...

edeg插件/扩展推荐:助力生活工作

WeTab 此插件在我看来有2个作用 1.改变edeg的主页布局和样式,使其更加精简,无广告 2.提供付费webtab Ai(底层是chatGpt) 沉浸式翻译 此插件可翻译网页的内容 假设我们浏览github 翻译前 翻译后 Better Ruler 可以对网页的距离进行测量 适合写前端的小伙伴 用法示例:...

基于Python读取ZIP和TAR格式压缩包教程

在数据处理和文件管理中,压缩包(如ZIP、TAR等格式)的使用非常普遍。Python提供了多种库来读取和处理这些压缩包。本文将介绍如何使用Python的内置库和第三方库来读取ZIP和TAR格式的压缩包。 1、读取ZIP文件 Python的zipfile模块提供了处理Z…...

懒人不下床型遥控方案--手机对电脑的简单遥控(无收费方案)

兄弟们,天气越发寒冷,不得不说,对像我这种喜欢看直播睡觉的懒狗越发的不友好了,每次昏昏欲睡但还要下床关直播的操作就像泡完温泉直接冲凉水澡,透心凉,心飞扬。 最进也是有时间找找合适的懒人方案解决这个…...

人工智能知识分享第八天-机器学习_泰坦尼克生存预估线性回归和决策树回归对比案例

泰坦尼克生存预估案例 import pandas as pd from sklearn.model_selection import train_test_split from sklearn.tree import DecisionTreeClassifier from sklearn.metrics import classification_report import matplotlib.pyplot as plt from sklearn.tree import plot_t…...

html中下拉选框的基本实现方式及JavaScript动态修改选项内容情况总结

最近项目中使用到了下拉选项以及通过js判断动态改变选项值的相关操作,查询了一些相关内容,在此记录一下,以免后续再碰到布置如何书写。 一、html中下拉选框的基本方式 在 HTML 中,创建下拉选择框(也叫选择菜单&#…...

sql server期末复习

表操作 创建create 删除drop 修改alter 数据操作 查询 select from <tableName> 插入 insert into <tableName> values 修改 update <tableName> set 删除 delete from <tableName> 授权与收回对数据的操作权限 授予 grant <权…...

LabVIEW语言学习过程是什么?

学习LabVIEW语言的过程可以分为几个阶段&#xff0c;每个阶段的重点内容逐步加深&#xff0c;帮助你从入门到精通。以下是一个简洁的学习过程&#xff1a; ​ 1. 基础入门阶段 理解图形化编程&#xff1a;LabVIEW是一种图形化编程语言&#xff0c;与传统的文本编程语言不同&am…...

小程序租赁系统开发的优势与应用前景分析

内容概要 小程序租赁系统是一种新兴的数字化解决方案&#xff0c;旨在为用户提供更加便捷与高效的租赁服务。它通常包括一系列功能&#xff0c;如在线浏览、即时预定、支付功能以及用户反馈机制。这些系统在使用上极为友好&#xff0c;让用户能够轻松选择所需的商品或服务&…...

『SQLite』安装与基本命令语法

SQLite安装 Windows&#xff1a; 访问 SQLite 的安装网页&#xff1a;https://www.sqlite.org/download.html.向下滚动页面到“Precompiled Binaries for Windows”部分。下载适用于你的系统架构&#xff08;32-bit 或 64-bit&#xff09;的预编译二进制文件。将下载的 ZIP 文…...

Unity-Mirror网络框架-从入门到精通之Benchmark示例

文章目录 前言什么是Benchmark&#xff1f;Benchmark 简要说明Benchmark示例BenchmarkNetworkManagerMonsterMovementPlayerMovementInterestManagement性能指标 BenchmarkIdle示例BenchmarkPrediction示例BenchmarkStinkySteak示例 前言 在现代游戏开发中&#xff0c;网络功能…...

毕业项目推荐:基于yolov8/yolov5的行人检测识别系统(python+卷积神经网络)

文章目录 概要一、整体资源介绍技术要点功能展示&#xff1a;功能1 支持单张图片识别功能2 支持遍历文件夹识别功能3 支持识别视频文件功能4 支持摄像头识别功能5 支持结果文件导出&#xff08;xls格式&#xff09;功能6 支持切换检测到的目标查看 二、数据集三、算法介绍1. YO…...

今日头条ip属地根据什么显示?不准确怎么办

在今日头条这样的社交媒体平台上&#xff0c;用户的IP属地信息对于维护网络环境的健康与秩序至关重要。然而&#xff0c;不少用户发现自己的IP属地显示与实际位置不符&#xff0c;这引发了广泛的关注和讨论。本文将深入探讨今日头条IP属地的显示依据&#xff0c;并提供解决IP属…...

FPGA设计-如何使用后端工具

目录 简介 布线布局 设计前期 布局布线策略 兼谈如何做第一次布局布线 正确看待map之后的资源占用报告 简介 本章节主要说明Xilinx的一些后端工具能为我们做什么在什么情况下我们考虑使用这些工具至于这些工具具体如何使用可以看Xilinx提供的相关文件 可从www.xilinx.com…...

苍穹外卖04——Redis初入门 在店铺打烊or营业状态管理功能中的使用

Redis入门 redis简介 它以键值对的形式存储数据在内存中,并且以极高的性能和灵活性而著称,通常用于缓存、消息代理以及持久化数据。 - 基于内存存储,读写性能高- 适合存储热点数据(热点商品、资讯、新闻)- 企业应用广泛Windows版下载地址:https://github.com/microsoft…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

<6>-MySQL表的增删查改

目录 一&#xff0c;create&#xff08;创建表&#xff09; 二&#xff0c;retrieve&#xff08;查询表&#xff09; 1&#xff0c;select列 2&#xff0c;where条件 三&#xff0c;update&#xff08;更新表&#xff09; 四&#xff0c;delete&#xff08;删除表&#xf…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...