最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring MVC深入學(xué)習(xí)之啟動初始化過程

 更新時間:2017年07月16日 11:05:45   作者:Seven_Nee  
最近因?yàn)楣ぷ鞯脑蛟趯W(xué)習(xí)Spring MVC,為了更深入的學(xué)習(xí)Spring MVC,下面這篇文章主要給大家介紹了關(guān)于Spring MVC深入學(xué)習(xí)之啟動初始化過程的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。

前言

雖然從學(xué)java的第一個程序——helloworld至今,已經(jīng)有好幾個年頭了。當(dāng)時自己找資料,看視頻,學(xué)習(xí)了java的輸入輸出流,多線程,網(wǎng)絡(luò)編程等等, 而三大框架(Struts、Hibernate、Spring)基本只是開了個頭就出來實(shí)習(xí)了,尤其對于Spring更是沒有進(jìn)行系統(tǒng)的學(xué)習(xí), 雖然在實(shí)習(xí)的時候通過看項(xiàng)目,基本明白了spring mvc編程的框架是怎么回事,遇到需求知道如何寫代碼,在哪寫代碼,但是還是缺乏一個系統(tǒng)的認(rèn)識。

因?yàn)樽罱卷?xiàng)目使用 struts2 作為控制層框架,為了實(shí)現(xiàn)前后端分離,計劃將 struts2 切換為 SpringMVC ,因此,這段時間都在學(xué)習(xí)新的框架,《Spring實(shí)戰(zhàn)》是一本好書,里面對 Spring 的原理實(shí)現(xiàn)以及應(yīng)用都說得很透徹,強(qiáng)烈推薦,但是如果想深挖 Spring 的實(shí)現(xiàn),還是要從他的源碼入手,這次,就先從 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.

其初始化的過程實(shí)際如下:


SpringMVC 的 web.xml配置

web.xml 配置代碼:

<?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>標(biāo)簽中定義了spring容器加載器
  • <servlet>標(biāo)簽中定義了spring前端控制器

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

ContextLoaderListener監(jiān)聽器的作用就是啟動Web容器時,自動裝配ApplicationContext的配置信息。因?yàn)樗鼘?shí)現(xiàn)了ServletContextListener這個接口,在web.xml配置了這個監(jiān)聽器,啟動容器時,就會默認(rèn)執(zhí)行它實(shí)現(xiàn)的方法。由于在ContextLoaderListener中關(guān)聯(lián)了ContextLoader這個類,所以整個加載配置過程由ContextLoader來完成。

DispatchServlet初始化

在SpringMVC架構(gòu)中,DispatchServlet負(fù)責(zé)請求分發(fā),起到控制器的作用。下面詳細(xì)來解釋說明:


  • DispatchServlet名如其義,它的本質(zhì)上是一個Servlet,子類不斷的對HttpServlet父類進(jìn)行方法擴(kuò)展
  • HttpServlet有兩大核心方法:init()和service()方法。HttpServletBean重寫了init()方法,在這部分,我們可以看到其實(shí)現(xiàn)思路:公共的部分統(tǒng)一來實(shí)現(xiàn),變化的部分統(tǒng)一來抽象,交給其子類來實(shí)現(xiàn),故用了abstract class來修飾類名。此外,HttpServletBean提供了一個HttpServlet的抽象實(shí)現(xiàn),使的Servlet不再關(guān)心init-param部分的賦值,讓servlet更關(guān)注于自身Bean初始化的實(shí)現(xiàn)
  • FrameworkServlet提供了整合web javabean和spring application context的整合方案。在源碼中可以看到通過執(zhí)行initWebApplicationContext()方法和initFrameworkServlet()方法實(shí)現(xiàn)
  • DispatchServlet是HTTP請求的中央調(diào)度處理器,它將web請求轉(zhuǎn)發(fā)給controller層處理,它提供了敏捷的映射和異常處理機(jī)制,DispatchServlet轉(zhuǎn)發(fā)請求的核心代碼在doService()方法中實(shí)現(xiàn)

DispatchServlet類和ContextLoaderListener類的關(guān)系圖:


用ContextLoaderListener初始化上下文,接著使用DispatchServlet來初始化WebMVC的上下文

總結(jié)

以上就是這篇文章的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • Java實(shí)現(xiàn)簡單學(xué)生管理系統(tǒng)

    Java實(shí)現(xiàn)簡單學(xué)生管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡單學(xué)生管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • 淺談JAVA 線程狀態(tài)中可能存在的一些誤區(qū)

    淺談JAVA 線程狀態(tài)中可能存在的一些誤區(qū)

    這篇文章主要介紹了淺談JAVA 線程狀態(tài)中可能存在的一些誤區(qū),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Java使用Jedis操作Redis服務(wù)器的實(shí)例代碼

    Java使用Jedis操作Redis服務(wù)器的實(shí)例代碼

    本篇文章主要介紹了Java使用Jedis操作Redis服務(wù)器的實(shí)例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • springboot中redis操作Hash踩坑解決

    springboot中redis操作Hash踩坑解決

    本文主要介紹了springboot中redis操作Hash踩坑解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06
  • SpringBoot如何進(jìn)行業(yè)務(wù)校驗(yàn)實(shí)例詳解

    SpringBoot如何進(jìn)行業(yè)務(wù)校驗(yàn)實(shí)例詳解

    這篇文章主要給大家介紹了關(guān)于SpringBoot如何進(jìn)行業(yè)務(wù)校驗(yàn)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2022-01-01
  • 一文帶你搞懂Java中的泛型和通配符

    一文帶你搞懂Java中的泛型和通配符

    泛型機(jī)制在項(xiàng)目中一直都在使用,甚至很多源碼中都用到了泛型機(jī)制。但是里面很多的機(jī)制和特性一直沒有明白,尤其通配符這塊,經(jīng)常忘記。本文對此做了一些總結(jié),具有一定借鑒價值,希望有所幫助
    2022-09-09
  • SpringBoot2.x的依賴管理配置

    SpringBoot2.x的依賴管理配置

    這篇文章主要介紹了SpringBoot2.x的依賴管理配置,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • SpringCloud集成Hystrix熔斷過程分步分解

    SpringCloud集成Hystrix熔斷過程分步分解

    通過hystrix可以解決雪崩效應(yīng)問題,它提供了資源隔離、降級機(jī)制、融斷、緩存等功能。接下來通過本文給大家分享SpringCloud集成Hystrix熔斷,感興趣的朋友一起看看吧
    2022-09-09
  • Java中FTPClient上傳中文目錄、中文文件名亂碼問題解決方法

    Java中FTPClient上傳中文目錄、中文文件名亂碼問題解決方法

    這篇文章主要介紹了Java中FTPClient上傳中文目錄、中文文件名亂碼問題解決方法,本文使用apache-commons-net工具包時遇到這個問題,解決方法很簡單,需要的朋友可以參考下
    2015-05-05
  • Kotlin 基礎(chǔ)教程之?dāng)?shù)組容器

    Kotlin 基礎(chǔ)教程之?dāng)?shù)組容器

    這篇文章主要介紹了Kotlin 基礎(chǔ)教程之?dāng)?shù)組容器的相關(guān)資料,需要的朋友可以參考下
    2017-06-06

最新評論

山阳县| 运城市| 静海县| 朝阳县| 南康市| 浏阳市| 长乐市| 德州市| 儋州市| 固镇县| 化州市| 修武县| 天津市| 苗栗市| 改则县| 兴宁市| 宜春市| 平度市| 玉门市| 新安县| 缙云县| 门头沟区| 中宁县| 丰都县| 兴安县| 虞城县| 武安市| 施秉县| 扶沟县| 海城市| 沙湾县| 交口县| 安塞县| 潍坊市| 墨竹工卡县| 瓦房店市| 新化县| 衢州市| 开远市| 博乐市| 万载县|