经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Spring » 查看文章
浅聊一下SpringMVC的核心组件以及通过源码了解其执行流程
来源:cnblogs  作者:CodeYHY  时间:2023/9/9 10:38:25  对本文有异议

浅聊一下SpringMVC的核心组件以及通过源码了解其执行流程

MVC作为WEB项目开发的核心环节,正如三个单词的分解那样,Controller(控制器)将View(视图、用户客户端)与Model(javaBean:封装数据)分开构成了MVC,今天我们浅聊一下SpringMVC的相关组件以及通过源码了解器执行流程

SpringMVC的核心组件 :前端控制器 DispatcherServlet

我们需要先在web.xml里面配置DispatcherServlet,现在我给出两种配置方式。默认以及扩展配置
1. 默认配置方式
使用此种方式配置,springmvc配置文件位于WEB-INF下
① SpringMVC的配置文件默认位于WEB-INF下默认名称为-servlet.xml
② 设置springMVC的核心控制器所能处理的请求的请求路径
** /:所匹配的请求可以是login或.html或.js或.css方式的请求路径,但是/不能匹配.jsp请求路径的请求**

  1. <!-- 配置SpringMVC的前端控制器,对游览器发送的请求统一进行处理 默认配置如下:-->
  2. <servlet>
  3. <servlet-name>DispatcherServlet</servlet-name>
  4. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  5. </servlet>
  6. <servlet-mapping>
  7. <servlet-name>DispatcherServlet</servlet-name>
  8. <url-pattern>/</url-pattern>
  9. </servlet-mapping>

2. 扩展方式配置
使用此种配置方式,可以将springmvc配置文件,设置到src/main/resource中
① 可通过init-param标签设置SpringMVC配置文件的位置和名称
② 通过load-on-startup标签设置SpringMVC前端控制器DispatcherServlet的初始化时间

  1. <!-- 配置SpringMVC的前端控制器,对游览器发送的请求统一进行处理 扩展配置如下:-->
  2. <servlet>
  3. <servlet-name>DispatcherServlet</servlet-name>
  4. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  5. <!-- 通过初始化参数指定SpringMVC配置文件的位置和名称 -->
  6. <init-param>
  7. <!-- contextConfigLocation为固定值 -->
  8. <param-name>contextConfigLocation</param-name>
  9. <!-- 使用classpath:表示从类路径查找配置文件,例如maven工程中的src/main/resources -->
  10. <param-value>classpath:springMVC.xml</param-value>
  11. </init-param>
  12. <!--
  13. 作为框架的核心组件,在启动过程中有大量的初始化操作要做
  14. 而这些操作放在第一次请求时才执行,会严重影响访问速度
  15. -->
  16. <!-- 通过此标签将启动控制DispatcherServlet的初始化时间提前到服务器启动时 -->
  17. <load-on-startup>1</load-on-startup>
  18. </servlet>
  19. <servlet-mapping>
  20. <servlet-name>DispatcherServlet</servlet-name>
  21. <!--
  22. 设置springMVC的前端控制器所能处理的请求的请求路径
  23. /:所匹配的请求可以是login或.html或.js或.css方式的请求路径
  24. 但是/不能匹配.jsp请求路径的请求
  25. -->
  26. <url-pattern>/</url-pattern>
  27. </servlet-mapping>

==》 推荐大家使用扩展方式配置SpringMVC
使用扩展方式配置,可以指定其配置文件的位置和名称,更加灵活方便
image

SpringMVC在执行的时候用到的几个重要组件

  1. HandlerMapping 处理器映射器
    ① 在SpringMVC中会有很多请求过来,每个请求都需要有一个Handler处理(Controller)
    ② HandlerMapping的作用便是找到请求向对应的处理器。

  2. HandlerAdapter 处理器适配器
    HandlerMapping只是解析URL,通过映射找到对应的Controller,但是真正调用Controller层方法的是HandlerAdapter

  3. View Resolver 视图解析器
    解析ModelAndView对象,根据逻辑名称找到视图,并把数据渲染到页面上

SpringMVC的工作流程可以分为几个步骤

  1. 用户发起请求,请求先被Servlet拦截转发给SpringMVC框架。

  2. SpringMVC里面的DispatchServlet核心控制器,会接收到请求并转发给HandlerMapping

  3. HandlerMapping负责解析请求,根据请求信息和配置信息找到匹配的Controller。

  4. 如果用户配置拦截器,就会按照顺序执行拦截器里面的preHandle方法

  5. 由HandlerAdapter执行相应的Contoller层方法,最终返回值被封装成一个ModelAndView对象(视图名称,和视图的模型数据)

  6. 视图解析器根据名称找到视图,然后把数据模型填充到视图里面再渲染到页面上

DispatcherServlet源代码解析执行流程

接下来,我将会进入到DispatcherServlet的源代码核心部分中带大家看一下其执行流程

  1. package org.springframework.web.servlet.DispatcherServlet

这里,我只截取了最核心的部分,展示给大家,已经能足够展示其工作流程了
image

如果这篇文章对大家理解SpringMVC的工作流程有了一定帮助,希望兄弟一键三连,再次感谢大家!!!

原文链接:https://www.cnblogs.com/CodeYHY/p/17688728.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号