SpringMVC的Dispatcher解讀
SpringMVC的Dispatcher
Spring的web框架?chē)@DispatcherServlet設(shè)計(jì)
以請(qǐng)求為驅(qū)動(dòng) , 圍繞一個(gè)中心Servlet分派請(qǐng)求及提供其他功能
DispatcherServlet是一個(gè)實(shí)際的Servlet (它繼承自HttpServlet 基類(lèi))


借用B站狂神的流程圖(其中實(shí)現(xiàn)全部是框架給我們做的,我們只需要補(bǔ)充虛線的流程就好。)

SpringMVC是Spring中的模塊,它實(shí)現(xiàn)了mvc設(shè)計(jì)模式的web框架,首先用戶發(fā)出請(qǐng)求,請(qǐng)求到達(dá)SpringMVC的前端控制器(DispatcherServlet),前端控制器根據(jù)用戶的url請(qǐng)求處理器映射器查找匹配該url的handler,并返回一個(gè)執(zhí)行鏈,前端控制器再請(qǐng)求處理器適配器調(diào)用相應(yīng)的handler進(jìn)行處理并返回給前端控制器一個(gè)modelAndView,前端控制器再請(qǐng)求視圖解析器對(duì)返回的邏輯視圖進(jìn)行解析,最后前端控制器將返回的視圖進(jìn)行渲染并把數(shù)據(jù)裝入到request域,返回給用戶。
DispatcherServlet作為springMVC的前端控制器,負(fù)責(zé)接收用戶的請(qǐng)求并根據(jù)用戶的請(qǐng)求返回相應(yīng)的視圖給用戶
- 用戶發(fā)出請(qǐng)求,該請(qǐng)求到達(dá)SpringMVC的前端控制器。
- 前端控制器會(huì)根據(jù)用戶請(qǐng)求的URL請(qǐng)求處理器映射器查找匹配的handler。
- 并返回一個(gè)執(zhí)行鏈(HanlderExecution)。
- 前端控制器再請(qǐng)求處理器適配器(HandlerAdapter)去執(zhí)行對(duì)應(yīng)的Handler,Handler會(huì)讓Controller去執(zhí)行!
- Controller將具體的執(zhí)行信息(我們?cè)搶?xiě)的代碼)返回給HandlerAdapter,如ModelAndView。 如:攜帶數(shù)據(jù) + 要跳轉(zhuǎn)的視圖 HelloServlet類(lèi) 。
- HandlerAdapter將視圖邏輯名或模型傳遞給DispatcherServlet。
- DispatcherServlet調(diào)用視圖解析器(ViewResolver)來(lái)解析HandlerAdapter傳遞的邏輯視圖名。
所謂視圖解析器就是拼接字符串
mv.setViewName("hello"); //: /WEB-INF/jsp/hello.jsp<!--視圖解析器:DispatcherServlet給他的ModelAndView
1.獲取了ModelAndView的數(shù)據(jù)
2.解析ModelAndView的視圖名字 Hello
3.根據(jù)前綴和后綴去拼接視圖名稱/WEB-INF/jsp/hello.jsp
4.將數(shù)據(jù)渲染到這個(gè)視圖上。
-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="InternalResourceViewResolver">
<!--前綴-->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!--后綴-->
<property name="suffix" value=".jsp"/>
</bean>
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- 通過(guò)xml配置SpringMVC注解DispatcherServlet初始化過(guò)程解析
- SpringMVC中DispatcherServlet的HandlerMapping詳解
- SpringMVC之AbstractAnnotationConfigDispatcherSer解讀
- SpringMVC核心DispatcherServlet處理流程分步詳解
- 深入理解SpringMVC中央調(diào)度器DispatcherServlet
- Springmvc DispatcherServlet原理及用法解析
- SpringMVC DispatcherServlet組件實(shí)現(xiàn)解析
相關(guān)文章
idea無(wú)法識(shí)別注解,或pom文件異常的問(wèn)題及解決
文章介紹了三種解決IDEA無(wú)法識(shí)別注解或POM文件異常的方法:1.檢查省電模式設(shè)置;2.為未識(shí)別的POM文件添加Maven工程;3.移除并重新添加有問(wèn)題的模塊2026-01-01
mybatis一級(jí)緩存和二級(jí)緩存的區(qū)別及說(shuō)明
這篇文章主要介紹了mybatis一級(jí)緩存和二級(jí)緩存的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11
解決springboot啟動(dòng)失敗的問(wèn)題('hibernate.dialect'?not?set)
這篇文章主要介紹了解決springboot啟動(dòng)失敗的問(wèn)題('hibernate.dialect'?not?set),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
關(guān)于@ComponentScan?TypeFilter自定義指定掃描bean的規(guī)則
這篇文章主要介紹了關(guān)于@ComponentScan?TypeFilter自定義指定掃描bean的規(guī)則,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09
springboot?filter配置多個(gè)時(shí),執(zhí)行順序問(wèn)題
這篇文章主要介紹了springboot?filter配置多個(gè)時(shí),執(zhí)行順序問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12

