国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - Spring MVC深入學(xué)習(xí)之啟動(dòng)初始化過(guò)程

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

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

最近因?yàn)楣ぷ鞯脑蛟趯W(xué)習(xí)Spring MVC,為了更深入的學(xué)習(xí)Spring MVC,下面這篇文章主要給大家介紹了關(guān)于Spring MVC深入學(xué)習(xí)之啟動(dòng)初始化過(guò)程的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋

前言

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

因?yàn)樽罱卷?xiàng)目使用 struts2 作為控制層框架,為了實(shí)現(xiàn)前后端分離,計(jì)劃將 struts2 切換為 springmvc ,因此,這段時(shí)間都在學(xué)習(xí)新的框架,《spring實(shí)戰(zhàn)》是一本好書(shū),里面對(duì) spring 的原理實(shí)現(xiàn)以及應(yīng)用都說(shuō)得很透徹,強(qiáng)烈推薦,但是如果想深挖 spring 的實(shí)現(xiàn),還是要從他的源碼入手,這次,就先從 springmvc 初始化開(kāi)始。

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

web容器初始化過(guò)程

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

  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.

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

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

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

在 servlet api中有一個(gè)servletcontextlistener接口,它能夠監(jiān)聽(tīng)servletcontext對(duì)象的生命周期,實(shí)際上就是監(jiān)聽(tīng)web應(yīng)用的生命周期。當(dāng)servlet容器啟動(dòng)或終止web應(yīng)用時(shí),會(huì)觸發(fā)servletcontextevent事件,該事件由servletcontextlistener來(lái)處理。在servletcontextlistener接口中定義了處理servletcontextevent 事件的兩個(gè)方法contextinitialized()contextdestroyed()

contextloaderlistener監(jiān)聽(tīng)器的作用就是啟動(dòng)web容器時(shí),自動(dòng)裝配applicationcontext的配置信息。因?yàn)樗鼘?shí)現(xiàn)了servletcontextlistener這個(gè)接口,在web.xml配置了這個(gè)監(jiān)聽(tīng)器,啟動(dòng)容器時(shí),就會(huì)默認(rèn)執(zhí)行它實(shí)現(xiàn)的方法。由于在contextloaderlistener中關(guān)聯(lián)了contextloader這個(gè)類(lèi),所以整個(gè)加載配置過(guò)程由contextloader來(lái)完成。

dispatchservlet初始化

在springmvc架構(gòu)中,dispatchservlet負(fù)責(zé)請(qǐng)求分發(fā),起到控制器的作用。下面詳細(xì)來(lái)解釋說(shuō)明:

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

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

dispatchservlet類(lèi)和contextloaderlistener類(lèi)的關(guān)系圖:

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

用contextloaderlistener初始化上下文,接著使用dispatchservlet來(lái)初始化webmvc的上下文

總結(jié)

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产精品福利视频 | 亚洲精品久久久久中文字幕欢迎你 | 色av网| 国内精品久久久久久影视8 有码在线 | 亚洲一本| 中文字幕免费视频 | 久久美女 | 人人爽视频| 亚洲精品国偷拍自产在线观看 | 国产精品久久久久久久久久久久久 | 国产毛片欧美毛片久久久 | 国内精品视频一区二区三区八戒 | 久久www免费人成看片高清 | 中文字幕天堂在线 | 亚洲天堂网站 | 91精品国产综合久久久久久 | 亚洲啪啪网站 | 在线a人片免费观看视频 | 国产在线观看免费 | 天天澡天天狠天天天做 | 可以在线观看的av网站 | 成人激情在线视频 | 国产在线专区 | 91精品国产综合久久久久 | 成人在线观看免费视频 | 色av影院| 久久精品免费观看 | 国产成人综合一区二区三区 | 成人精品视频 | 欧美在线视频一区二区 | 91久久久久久久 | 最新国产在线 | 免费一级片 | 午夜视频网 | 91视频大全 | 日韩在线精品 | 欧美福利电影在线观看 | 久久精品网| 国产欧美日韩综合精品一区二区 | 黄色在线观看网址 | 国产一级视频在线观看 |