SpringMVC执行流程

https://www.bilibili.com/video/BV1vs4y1S7cZ?p=2&vd_source=dfa1c0cf0e415bd95bc2263617b13437

Spring MVC源码解析

1 Spring MVC基于XML配置开发

需要开发者手动去定义配置文件,处理器的配置、实现特定接口、视图的配置、包扫描等的配置.…都是基于XML
文件来完成。
Spring MVC核心组件。SpringMVC执行流程:

SpringMVC执行流程_第1张图片
首先 左边客户端
步骤1 客户端发送请求 请求后台web容器也就是Tomcat 当然咱们在这个Tomcat中由 1. DispatcherServlet表示前端控制器,是整个SpringMVC的控制中心,用户发出请求,DispatcherServlet接收请求并拦截请求。它是springmvc最为核心的组件 起到中央控制的作用
http://localhost:8080/springmvc-02-HelloSpringMVC/hello
以上的URL拆分成三部分:
http://localhost:8080 : 服务器域名
springmvc-02-HelloSpringMVC :部署在服务器上的Web站点
hello : 表示控制器
以上的URL解释:请求位于http://localhost:8080上的springmvc-02-HelloSpringMVC站点的hello资源(可以是servlet, 页面)
步骤2 具体如何控制,其他组件就开始起作用了 第二个组件叫HandlerMapping:处理器映射器。具体作用是处理映射 谁去处理我们的cotrol去处理例如咱们都在control包下放了userControl,员工Control 这都叫控制器 映射器 映射一个请求的路径 前端过来的请求他其实里面包含一个具体的圆也就是url 那么url到底要更哪个控制器control进行映射
其实handler mapping 就做这样的一件事 第二步根据请求找到处理器映射器
步骤3 这步找完之后 处理器映射器就有返回了 他返回了一组叫做处理器映射器的映射啊 其实就是一个control和一个url的映射
步骤4 这组映射给到前端控制器 前端控制器拿到这一组映射之后 继续往后走 找到 HandlerAdapter 我们称之为处理器适配器
步骤5 找到处理器适配器 他在这而里面就有具体的去根据这个请求找到具体的处理者 寻找处理器就是寻找谁可以去做这样的一个请求 也就是此时找到Handle
步骤6 Handle他就知道他要处理的是一个control 他去找control 这个control注意是我们手写下的control包下的东西userControl control往后走就找到我们的业务层了service service往后走他就找到具体所处理的这dao层 数据库
步骤9 ,10 返回数据 给control
步骤11 control 把数据返回给handler
步骤12 这个数据handler拿到之后 交回来 交给处理器适配器
步骤13 处理器适配器继续把数据再返回数据给dispatcherservlet 前端控制器就持有了这个真正的数据了 前端控制器他要去 接下来告诉这个数据由谁来解析和呈现 他前端控制器肯定不是自己解析 他接下来要找一个组件叫视图解析器ViewResolver
步骤14 前端控制器将数据交给了视图解析器 那么他再把这个数据(他是放在了一个将数据绑定在这个model and view中)交给视图解析器的时候
步骤15 视图解析器拿到这个数据之后继续返回 他返回一个view对象 这个view对象其实是一个视图的路径 比如你是一个jsp的文件路径 此时前端控制器 他知道你最后返回的是要把这个数据交给一个view对应的路径下的一个文件进行渲染
步骤16 视图的渲染
步骤17 视图渲染之后 这个当然要有前端控制器统一的去相应给前端 最后一步就是响应
图中重点 5个重要的组件对象
还有2 个对象 ModelAndView对象(绑定数据的)和 View对象(视图对象)

疑问解答
问:springmvc中 url请求过来 是因为他dispatcharservlet中央控制处理之后交给了handlemapping 这样理解的对吗?
gpt是的,Spring MVC中的请求处理流程是由DispatcherServlet作为中央控制器,根据请求的URL分发给相应的HandlerMapping进行处理。HandlerMapping会根据请求的URL匹配到对应的Controller,然后将请求转发给Controller进行处理。在Controller中,可以通过调用Service层或者其他组件来完成业务逻辑处理,最终返回ModelAndView对象给DispatcherServlet进行视图渲染。
问:我想知道的是 springmvc中 各个组件比如handlerAdapter和DispachterServlet和viewResover之间的数据链路一直是联通的。所以我们发送数据自动这样传送处理对吗,也就是他们不需要建立连接。直接就传送数据了
是的,Spring MVC中的各个组件之间的数据链路是通过DispatcherServlet来实现的,它们之间不需要建立连接,而是通过Servlet容器提供的请求响应机制来传递数据。具体来说,当客户端发送请求时,Servlet容器会将请求封装成HttpServletRequest对象,并将其传递给DispatcherServlet。DispatcherServlet会根据请求的URL选择合适的HandlerMapping和HandlerAdapter来处理请求,并将处理结果封装成ModelAndView对象。最后,DispatcherServlet会将ModelAndView对象传递给ViewResolver来选择合适的视图进行渲染,并将渲染结果封装成HttpResponse对象返回给客户端。
在整个请求处理过程中,各个组件之间的数据链路是始终保持联通的,因为它们都是在同一个请求上下文中运行的。这种方式可以有效地降低系统的耦合度,提高代码的可维护性和可扩展性。

2 Spring MVC基于XML配置的实现

1.创建一个项目:springmvc_code。创建成划ava企业级的项目。
JsP本质上就是Servlet(组件)。

  • 如果使用原生的Servlet响应网页给客户端,需要使用PrintWriter的write(“xxx”)或者是printIn(“xxx”)。
  • 将TML代码抽离出来,定义在其他的文:中,使用动态拼接渲染,最终响应给客户端。
  • 在SP文件中可以直接定义网页的代码结构。可以通过EL表达式、」STL标签库来完成页面的动态数据加载。
  • Tomcati在编译sP文件(Hello.jsp)的时候,将jsp转化成-个Servlet组件(Hello_jsp.java-Java源文件)。最后经过VM虚拟机将Servlet组件转化成一个字节码文件(Hello_jsp.class)。
    2.创建了一个Hello.jsp文件。
 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>SpringMvc基于XML文件的配置开发title>
head>
<body>
    <h1>SpringMVC基于XML文件的配置开发h1>
    <p>数据展示:${msg}p>
body>
html>

3.编写Web.xml核心配置文件:配置DispacherServlet、配置编码设置、springmvc-servlet,Xml文件。


  <servlet>
    <servlet-name>springmvcservlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
  servlet>

  <servlet-mapping>
    
    <servlet-name>springmvcservlet-name>
    
    <url-pattern>/url-pattern>
  servlet-mapping>
web-app>

3.Servlet原理分析

SpringMVC执行流程_第2张图片
SpringMVC执行流程_第3张图片

客户端 首先前端有一个按钮也好点击 发送一个请求 浏览器内部有通信组件 服务器Tomcat端也有一个通信组件
步骤1 请求到达通信组件 通信组件把这个数据进行一个打包
步骤2 完成请求数据的打包
步骤3 发送请求数据包 给指定ip这台服务器 连接早已建立好之后 直接发送数据就行了
步骤4 解析数据包 相当于字节码文件
步骤5 java程序处理之前做了前置动作 创建了两个对象 request对象 response对象 每个请求都会创建这两个对象 同时在创建这两个对象的时候会把请求过来的数据包解析的内容啊放到这个requesty对象里所以此时request!里它其实包含有咱们的请求数据呢
SpringMVC执行流程_第4张图片
步骤6 创建Servlet
步骤7 根据请求类型调用方法
步骤8 将步骤5的 请求对象和响应对象传递给咱们的service方法 这里也可以是doget 或 dopost方法 然后这个方法就开始运行了 通常在这个方法当中做两件事
(1)读取请求对象request中的数据
(2)响应数据给客户端 通过response对象来响应
步骤9 响应数据给通信组件
步骤10 通信组件将数据进行打包成响应数据包
步骤11 这个数据包才可以在互联网上通过http协议进行传输
步骤12 请求数据包到达客户端 客户端也不能直接读取,通信组件对响应数据包进行解析
步骤13 接续完成之后这个数据包才能被浏览器的nodejs或浏览器引擎才好进行渲染和呈现 然后客户端呢看到一个页面了
这个Servlet原理依赖的是http协议

你可能感兴趣的:(java,springmvc)