激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Spring MVC深入學習之啟動初始化過程

Spring MVC深入學習之啟動初始化過程

2020-12-02 14:34Seven_Nee Java教程

最近因為工作的原因在學習Spring MVC,為了更深入的學習Spring MVC,下面這篇文章主要給大家介紹了關于Spring MVC深入學習之啟動初始化過程的相關資料,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋

前言

雖然從學java的第一個程序——helloworld至今,已經有好幾個年頭了。當時自己找資料,看視頻,學習了java的輸入輸出流,多線程,網絡編程等等, 而三大框架(struts、hibernate、spring)基本只是開了個頭就出來實習了,尤其對于spring更是沒有進行系統的學習, 雖然在實習的時候通過看項目,基本明白了spring mvc編程的框架是怎么回事,遇到需求知道如何寫代碼,在哪寫代碼,但是還是缺乏一個系統的認識。

因為最近公司項目使用 struts2 作為控制層框架,為了實現前后端分離,計劃將 struts2 切換為 springmvc ,因此,這段時間都在學習新的框架,《spring實戰》是一本好書,里面對 spring 的原理實現以及應用都說得很透徹,強烈推薦,但是如果想深挖 spring 的實現,還是要從他的源碼入手,這次,就先從 springmvc 初始化開始。

  • web 容器初始化過程
  • springmvc的web.xml配置
  • dispatchservlet初始化

web容器初始化過程

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

  1. 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.
  2. instantiate an instance of each filter identified by a <filter> element in the deployment descriptor and call each filter instance's init() method.
  3. 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.

其初始化的過程實際如下:

Spring MVC深入學習之啟動初始化過程

springmvc 的 web.xml配置

web.xml 配置代碼:

 
?
1
 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?xml version="1.0" encoding="utf-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
   xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"
   xsi:schemalocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 
 <context-param>
  <param-name>contextconfiglocation</param-name>
  <param-value>classpath:applicationcontext.xml</param-value>
 </context-param>
 
 <listener>
  <listener-class>org.springframework.web.context.contextloaderlistener</listener-class>
 </listener>
 
 
 <servlet>
  <servlet-name>mvc-dispatcher</servlet-name>
  <servlet-class>
   org.springframework.web.servlet.dispatcherservlet
  </servlet-class>
  <load-on-startup>1</load-on-startup>
 </servlet>
                                   
 <servlet-mapping>
  <servlet-name>mvc-dispatcher</servlet-name>
  <url-pattern>/</url-pattern>
 </servlet-mapping>
 
</web-app>
  • <listener>標簽中定義了spring容器加載器
  • <servlet>標簽中定義了spring前端控制器

在 servlet api中有一個servletcontextlistener接口,它能夠監聽servletcontext對象的生命周期,實際上就是監聽web應用的生命周期。當servlet容器啟動或終止web應用時,會觸發servletcontextevent事件,該事件由servletcontextlistener來處理。在servletcontextlistener接口中定義了處理servletcontextevent 事件的兩個方法contextinitialized()contextdestroyed()

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

dispatchservlet初始化

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

Spring MVC深入學習之啟動初始化過程

  • dispatchservlet名如其義,它的本質上是一個servlet,子類不斷的對httpservlet父類進行方法擴展
  • 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類的關系圖:

Spring MVC深入學習之啟動初始化過程

用contextloaderlistener初始化上下文,接著使用dispatchservlet來初始化webmvc的上下文

總結

以上就是這篇文章的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

原文鏈接:https://segmentfault.com/a/1190000010203210

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久99国产伦子精品免费 | 伊人久操视频 | 成人午夜高清 | 精品一区二区三区免费毛片爱 | 欧美成人精品h版在线观看 国产一级淫片在线观看 | 中国国语毛片免费观看视频 | 久久99国产精品免费网站 | 最新一区二区三区 | 天天草天天操 | 日操操夜操操 | 日韩一级视频 | 911精品影院在线观看 | 成人毛片免费播放 | 亚洲综合色视频在线观看 | 精国品产一区二区三区有限公司 | 美女很黄很黄免费的 | 亚洲欧洲日韩av | 免费一级毛片在线播放视频 | 黄色免费av网站 | 久久综合久久美利坚合众国 | 色女生影院 | 精品黑人一区二区三区国语馆 | 日本成人一区二区三区 | 成年人激情在线 | 精品久久久久久久久久久久 | 羞羞视频免费网站男男 | 免费毛片视频播放 | 免费观看亚洲视频 | 亚洲欧美国产精品va在线观看 | 久久777国产线看观看精品 | 精品无码久久久久久国产 | 久久久久欧美 | 91av资源在线 | 污污黄| 天海翼四虎精品正在播放 | 久久久中精品2020中文 | 日本一区二区视频在线观看 | 91精品国产九九九久久久亚洲 | 宅男视频在线观看免费 | 欧美一级片免费在线观看 | 久久精品久久久久 |