亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時間:2017年07月16日 11:05:45   作者:Seven_Nee  
最近因為工作的原因在學習Spring MVC,為了更深入的學習Spring MVC,下面這篇文章主要給大家介紹了關于Spring MVC深入學習之啟動初始化過程的相關資料,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。

前言

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

因為最近公司項目使用 struts2 作為控制層框架,為了實現前后端分離,計劃將 struts2 切換為 SpringMVC ,因此,這段時間都在學習新的框架,《Spring實戰(zhàn)》是一本好書,里面對 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.

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


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

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

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

DispatchServlet初始化

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


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

DispatchServlet類和ContextLoaderListener類的關系圖:


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

總結

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

相關文章

  • Java 對稱加密幾種算法分別實現

    Java 對稱加密幾種算法分別實現

    這篇文章主要介紹了Java 對稱加密使用DES / 3DES / AES 這三種算法分別實現的相關資料,這里提供了實例代碼,需要的朋友可以參考下
    2017-01-01
  • 淺談Java安全編碼之文件和共享目錄的安全性

    淺談Java安全編碼之文件和共享目錄的安全性

    Java程序是跨平臺的,可以運行在windows也可以運行在linux。但是平臺不同,平臺中的文件權限也是不同的。windows大家經常使用,并且是可視化的權限管理,這里就不多講了。本文主要講講linux下面的文件的權限和安全性問題,并且探討一下如何在java程序中考慮文件的安全性
    2021-06-06
  • 教你怎么解決IDEA中“\t“空格顯示不正確的問題

    教你怎么解決IDEA中“\t“空格顯示不正確的問題

    在之前進行先來先服務(FCFS)調度算法的模擬過程中,使用IDEA進行開發(fā)時遇到了"\t"無法補全當前字符串長度到8的整數倍的問題.百度一圈發(fā)現也有很多程序員遇到了這樣的問題,但是沒有解決方法,于是有了這篇文章,需要的朋友可以參考下
    2021-05-05
  • java使用jar包生成二維碼的示例代碼

    java使用jar包生成二維碼的示例代碼

    這篇文章主要介紹了java使用jar包生成二維碼的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • Java多線程模擬售票程序和線程安全問題

    Java多線程模擬售票程序和線程安全問題

    本篇文章給大家分享了Java多線程模擬售票程序和線程安全問題的相關知識點,對此有興趣的朋友可以參考學習下。
    2018-05-05
  • Java生成表格圖片的實例代碼

    Java生成表格圖片的實例代碼

    這篇文章主要介紹了Java生成表格圖片的實例代碼,幫助大家更好的理解和學習Java,感興趣的朋友可以了解下
    2020-09-09
  • Java使用雪花算法生成唯一ID的實現示例

    Java使用雪花算法生成唯一ID的實現示例

    雪花算法是 Twitter 開源的一種分布式ID生成算法,其目的是生成全局唯一的 ID,本文主要介紹了Java使用雪花算法生成唯一ID的實現示例,具有一定的參考價值,感興趣的可以了解一下
    2024-07-07
  • Springboot應用中Mybatis輸出SQL日志的3種方法代碼示例

    Springboot應用中Mybatis輸出SQL日志的3種方法代碼示例

    在前臺請求數據的時候,sql語句一直都是打印到控制臺的,有一個想法就是想讓它打印到日志里,該如何做呢?這篇文章主要給大家介紹了關于Springboot應用中Mybatis輸出SQL日志的3種方法,需要的朋友可以參考下
    2024-01-01
  • springboot?maven?plugin報紅的解決辦法

    springboot?maven?plugin報紅的解決辦法

    本文主要介紹了springboot?maven?plugin報紅的解決辦法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • java實現圖片上插入文字并保存

    java實現圖片上插入文字并保存

    這篇文章主要為大家詳細介紹了java實現圖片上插入文字并保存,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06

最新評論