当前位置: 首页 > 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框架和运行的流程,下面的所有使用都将围绕这个原理展开。

http://www.lryc.cn/news/516298.html

相关文章:

  • Selenium 自动化,如何下载正确的 ChromeDriver
  • [Linux]redis5.0.x升级至7.x完整操作流程
  • Java字符编码与正则表达式深度解析
  • 【C++】B2099 矩阵交换行
  • 论文解读 | NeurIPS'24 IRCAN:通过识别和重新加权上下文感知神经元来减轻大语言模型生成中的知识冲突...
  • edeg插件/扩展推荐:助力生活工作
  • 基于Python读取ZIP和TAR格式压缩包教程
  • 懒人不下床型遥控方案--手机对电脑的简单遥控(无收费方案)
  • 人工智能知识分享第八天-机器学习_泰坦尼克生存预估线性回归和决策树回归对比案例
  • html中下拉选框的基本实现方式及JavaScript动态修改选项内容情况总结
  • sql server期末复习
  • LabVIEW语言学习过程是什么?
  • 小程序租赁系统开发的优势与应用前景分析
  • 『SQLite』安装与基本命令语法
  • Unity-Mirror网络框架-从入门到精通之Benchmark示例
  • 毕业项目推荐:基于yolov8/yolov5的行人检测识别系统(python+卷积神经网络)
  • 今日头条ip属地根据什么显示?不准确怎么办
  • FPGA设计-如何使用后端工具
  • 苍穹外卖04——Redis初入门 在店铺打烊or营业状态管理功能中的使用
  • 【MySQL关于数据库和表结构的增删查改】
  • JVM实战—11.OOM的原因和模拟以及案例
  • LLM - 使用 LLaMA-Factory 部署大模型 HTTP 多模态服务 教程 (4)
  • Clickhouse集群部署(3分片1副本)
  • 刷服务器固件
  • 数据结构C语言描述9(图文结合)--二叉树和特殊书的概念,二叉树“最傻瓜式创建”与前中后序的“递归”与“非递归遍历”
  • CSS——2.书写格式一
  • Elasticsearch 创建索引 Mapping映射属性 索引库操作 增删改查
  • 【NLP高频面题 - 分布式训练篇】ZeRO主要为了解决什么问题?
  • kubernetes-循序渐进了解coredns
  • mysql8 从C++源码角度看 客户端发送的sql信息 mysql服务端从网络读取到buff缓存中