日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

java分发器_SpringMVC核心分发器DispatcherServlet分析

發(fā)布時間:2025/3/21 javascript 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java分发器_SpringMVC核心分发器DispatcherServlet分析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

前言

DispatcherServlet初始化過程

DispatcherServlet處理請求過程

總結(jié)

參考資料

后期文章會首發(fā)于本專欄,歡迎關(guān)注,點贊JAVA高級進階?zhuanlan.zhihu.com

前言

SpringMVC是目前主流的Web MVC框架之一。

本文將分析SpringMVC的核心分發(fā)器DispatcherServlet的初始化過程以及處理請求的過程,讓讀者了解這個入口Servlet的作用。

DispatcherServlet初始化過程

在分析DispatcherServlet之前,我們先看下DispatcherServlet的繼承關(guān)系。

HttpSerlvetBean繼承自HttpServlet。

HttpServletBean覆寫了init方法,對初始化過程做了一些處理。 我們來看下init方法到底做了什么:

dispatcher

org.springframework.web.servlet.DispatcherServlet

1

contextConfigLocation

classpath:springConfig/dispatcher-servlet.xml

dispatcher

/

比如上面這段配置,傳遞了contextConfigLocation參數(shù),之后構(gòu)造BeanWrapper,這里使用BeanWrapper,有2個理由:1. contextConfigLocation屬性在FrameworkServlet中定義,HttpServletBean中未定義 2. 利用Spring的注入特性,只需要調(diào)用setPropertyValues方法就可將contextConfigLocation屬性設(shè)置到對應實例中,也就是以依賴注入的方式初始化屬性。

然后設(shè)置DispatcherServlet中的contextConfigLocation屬性(FrameworkServlet中定義)為web.xml中讀取的contextConfigLocation參數(shù),該參數(shù)用于構(gòu)造SpringMVC容器上下文。

下面看下FrameworkServlet這個類,FrameworkServlet繼承自HttpServletBean。

首先來看下該類覆寫的initServletBean方法:

接下來看下initWebApplicationContext方法的具體實現(xiàn)邏輯:

這里的根上下文是web.xml中配置的ContextLoaderListener監(jiān)聽器中根據(jù)contextConfigLocation路徑生成的上下文。

contextConfigLocation

classpath:springConfig/applicationContext.xml

org.springframework.web.context.ContextLoaderListener

比如這段配置文件中根據(jù)classpath:springConfig/applicationContext.xml下的xml文件生成的根上下文。

最后看下DispatcherServlet。

DispatcherServlet覆寫了FrameworkServlet中的onRefresh很明顯,initStrategies方法內(nèi)部會初始化各個策略接口的實現(xiàn)類。

比如異常處理初始化initHandlerExceptionResolvers方法:SpringMVC異常處理機制詳解

視圖處理初始化initViewResolvers方法:SpringMVC視圖機制詳解

請求映射處理初始化initHandlerMappings方法:詳解SpringMVC請求的時候是如何找到正確的Controller

總結(jié)一下各個Servlet的作用:

1. HttpServletBean

主要做一些初始化的工作,將web.xml中配置的參數(shù)設(shè)置到Servlet中。比如servlet標簽的子標簽init-param標簽中配置的參數(shù)。

2. FrameworkServlet

將Servlet與Spring容器上下文關(guān)聯(lián)。其實也就是初始化FrameworkServlet的屬性webApplicationContext,這個屬性代表SpringMVC上下文,它有個父類上下文,既web.xml中配置的ContextLoaderListener監(jiān)聽器初始化的容器上下文。

3. DispatcherServlet

初始化各個功能的實現(xiàn)類。比如異常處理、視圖處理、請求映射處理等。

DispatcherServlet處理請求過程

在分析DispatcherServlet處理請求過程之前,我們回顧一下Servlet對于請求的處理。

HttpServlet提供了service方法用于處理請求,service使用了模板設(shè)計模式,在內(nèi)部對于http get方法會調(diào)用doGet方法,http post方法調(diào)用doPost方法...........

進入processRequest方法看下:

其中注冊的監(jiān)聽器類型為ApplicationListener接口類型。

繼續(xù)看DispatcherServlet覆寫的doService方法:

最終就是doDispatch方法。

doDispatch方法功能簡單描述一下:

首先根據(jù)請求的路徑找到HandlerMethod(帶有Method反射屬性,也就是對應Controller中的方法),然后匹配路徑對應的攔截器,有了HandlerMethod和攔截器構(gòu)造個HandlerExecutionChain對象。HandlerExecutionChain對象的獲取是通過HandlerMapping接口提供的方法中得到。有了HandlerExecutionChain之后,通過HandlerAdapter對象進行處理得到ModelAndView對象,HandlerMethod內(nèi)部handle的時候,使用各種HandlerMethodArgumentResolver實現(xiàn)類處理HandlerMethod的參數(shù),使用各種HandlerMethodReturnValueHandler實現(xiàn)類處理返回值。 最終返回值被處理成ModelAndView對象,這期間發(fā)生的異常會被HandlerExceptionResolver接口實現(xiàn)類進行處理。

總結(jié)

本文分析了SpringMVC入口Servlet -> DispatcherServlet的作用,其中分析了父類HttpServletBean以及FrameworkServlet的作用。

SpringMVC的設(shè)計與Struts2完全不同,Struts2采取的是一種完全和Web容器隔離和解耦的機制,而SpringMVC就是基于最基本的request和response進行設(shè)計。

我這兒整理了比較全面的JAVA相關(guān)的面試資料,

需要領(lǐng)取面試資料的同學,請加群:473984645

總結(jié)

以上是生活随笔為你收集整理的java分发器_SpringMVC核心分发器DispatcherServlet分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。