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

歡迎訪問 生活随笔!

生活随笔

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

javascript

SpringMVC启动过程详解(li)

發布時間:2025/3/15 javascript 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringMVC启动过程详解(li) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  通過對SpringMVC啟動過程的深入研究,期望掌握Java Web容器啟動過程;掌握SpringMVC啟動過程;了解SpringMVC的配置文件如何配置,為什么要這樣配置;掌握SpringMVC是如何工作的;掌握Spring源碼的設計和增強閱讀源碼的技巧。

目錄

1.Web容器初始化過程

2.SpringMVC中web.xml配置

3.認識ServletContextListener

4.認識ContextLoaderListener

5.DispatcherServlet初始化(HttpServletBean ? FrameworkServlet ? DispatcherServlet

6.ContextLoaderListener與DispatcherServlet關系

7.DispatcherServlet的設計

8.DispatcherServlet工作原理

?

一、Web容器初始化過程

上圖展示了web容器初始化的過程,其官方文檔給出了這樣的描述:

  When a web application is deployed into a container, the following steps must be performed, in this order, before the web application begins processing client requests.

  • Instantiate an instance of each event listener identified by a <listener> element in the deployment descriptor.
  • For instantiated listener instances that implement ServletContextListener, call the contextInitialized() method.
  • Instantiate an instance of each filter identified by a <filter> element in the deployment descriptor and call each filter instance's init() method.
  • Instantiate an instance of each servlet identified by a <servlet> element that includes a <load-on-startup> element in the order defined by the load-on-startup element values, and call each servlet instance's init() method.
  • 二、SpringMVC中web.xml的配置

    上圖是截取的web.xml中的配置,在<listener>標簽中定義了spring容器加載器;在<servlet>標簽中定義了spring前端控制器。

    上圖是源碼中接口ServletContextListener的定義,可以看到在其注釋中指明:servlet和Filter初始化前和銷毀后,都會給實現了servletContextListener接口的監聽器發出相應的通知。

    上面是類ContextLoadListener的定義,它實現了上面的servletContextListener。這里用到了代理模式,簡單的代理了ContextLoader類。ContextLoadListener類用來創建Spring application context,并且將application context注冊到servletContext里面去。

    結合上面的WEB容器啟動的過程,以及接口ServletContextListener和類ContextLoadListener。我們知道:

      在?Servlet API中有一個ServletContextListener接口,它能夠監聽ServletContext對象的生命周期,實際上就是監聽Web應用的生命周期。當Servlet容器啟動或終止Web應用時,會觸發ServletContextEvent事件,該事件由ServletContextListener來處理。在ServletContextListener接口中定義了處理ServletContextEvent?事件的兩個方法contextInitialized()和contextDestroyed()。

      ContextLoaderListener監聽器的作用就是啟動Web容器時,自動裝配ApplicationContext的配置信息。因為它實現了ServletContextListener這個接口,在web.xml配置了這個監聽器,啟動容器時,就會默認執行它實現的方法。由于在ContextLoaderListener中關聯了ContextLoader這個類,所以整個加載配置過程由ContextLoader來完成。

    上面是initWebApplicationContext的過程,方法名稱即是其含義。方法中首先創建了WebApplicationContext,配置并且刷新實例化整個SpringApplicationContext中的Bean。因此,如果我們的Bean配置出錯的話,在容器啟動的時候,會拋異常出來的。

      綜上,ContextLoaderListener類起著至關重要的作用。它讀取web.xml中配置的context-param中的配置文件,提前在web容器初始化前準備業務對應的Application context;將創建好的Application context放置于ServletContext中,為springMVC部分的初始化做好準備。

    三、DispatchServlet初始化

      在SpringMVC架構中,DispatchServlet負責請求分發,起到控制器的作用。下面詳細來解釋說明:

    DispatchServlet名如其義,它的本質上是一個Servlet。從上面圖可以看到,下層的子類不斷的對HttpServlet父類進行方法擴展。

    上圖是抽象類HttpServletBean的實現,我們知道HttpServlet有兩大核心方法:init()和service()方法。HttpServletBean重寫了init()方法,在這部分,我們可以看到其實現思路:公共的部分統一來實現,變化的部分統一來抽象,交給其子類來實現,故用了abstract class來修飾類名。此外,HttpServletBean提供了一個HttpServlet的抽象實現,使的Servlet不再關心init-param部分的賦值,讓servlet更關注于自身Bean初始化的實現。

    上圖是FrameworkServlet的官方定義, 它提供了整合web javabean和spring application context的整合方案。那么它是如何實現的呢?在源碼中我們可以看到通過執行initWebApplicationContext()方法和initFrameworkServlet()方法實現。

    DispatchServlet是HTTP請求的中央調度處理器,它將web請求轉發給controller層處理,它提供了敏捷的映射和異常處理機制。DispatchServlet轉發請求的核心代碼在doService()方法中實現,詳細代碼參照圖上。

    上圖是DispatchServlet類和ContextLoaderListener類的關系圖。首先,用ContextLoaderListener初始化上下文,接著使用DispatchServlet來初始化WebMVC的上下文。

    上圖是DispatchServlet的工作流程圖,作為HTTP請求的中央控制器,它在SpringMVC中起著分發請求的作用。下面總結了DispatchServlet設計的一些特點總結。

    四、請求流程

    ?

    轉載于:https://www.cnblogs.com/RunForLove/p/5688731.html

    總結

    以上是生活随笔為你收集整理的SpringMVC启动过程详解(li)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。