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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

springboot需要tomcat服务器吗_SpringBoot学习(二):内嵌服务器引擎(Tomcat,Jetty)实现原理...

發(fā)布時(shí)間:2023/12/2 javascript 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 springboot需要tomcat服务器吗_SpringBoot学习(二):内嵌服务器引擎(Tomcat,Jetty)实现原理... 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

概述

  • SpringBoot使用main方法啟動(dòng)的一個(gè)重要特性是,不需要打包成war部署到Tomcat這種Servlet容器中,而是只需打包成jar,然后通過(guò)java或mvn等命令運(yùn)行這個(gè)jar包,然后應(yīng)用就可以在指定的端口監(jiān)聽(tīng)客戶端的連接請(qǐng)求了。
  • 在SpringBoot內(nèi)部主要是引用了embedded的Tomcat或Jetty等作為Servlet引擎,由該Servlet引擎負(fù)責(zé)接收Web請(qǐng)求并交給應(yīng)用處理和生成響應(yīng),從而可以將應(yīng)用打包成jar,直接在命令行啟動(dòng),以獨(dú)立進(jìn)程的方式運(yùn)行,無(wú)需依賴Tomcat等Servlet容器,但是可以實(shí)現(xiàn)跟部署到Tomcat中的war包一樣處理Web請(qǐng)求和響應(yīng)。

接口設(shè)計(jì)

  • 在接口設(shè)計(jì)層面,對(duì)Spring容器而言,是通過(guò)拓展ApplicationContext接口來(lái)增加Spring容器對(duì)Servlet引擎的支持;對(duì)Servlet引擎而言,則是定義了WebServer接口來(lái)代表Servlet引擎或者說(shuō)是Web服務(wù)器,WebServer接口實(shí)現(xiàn)類為具體的Servlet引擎實(shí)現(xiàn)。
  • Spring容器通過(guò)包含WebServer的引用來(lái)負(fù)責(zé)Servlet引擎的啟動(dòng)關(guān)閉。同時(shí)與普通Servlet容器實(shí)現(xiàn)(如Tomcat)一樣,將Spring應(yīng)用通過(guò)關(guān)聯(lián)一個(gè)ServletContext引用來(lái)建立與Servlet引擎的關(guān)聯(lián),同時(shí)將自身保存為ServletContext引用的attribute。
  • 應(yīng)用自身在啟動(dòng)的時(shí)候,會(huì)創(chuàng)建和啟動(dòng)Spring容器,在Spring容器中通過(guò)該WebServer引用來(lái)啟動(dòng)對(duì)應(yīng)的Servlet引擎。并在啟動(dòng)Servlet引擎過(guò)程中,創(chuàng)建該應(yīng)用對(duì)應(yīng)的ServletContext,由該ServletContext來(lái)間接建立當(dāng)前應(yīng)用與Servlet引擎的關(guān)聯(lián)。

Spring容器ApplicationContext體系

  • WebServerApplicationContext接口:定義獲取WebServer引用的方法
  • ServletWebServerApplicationContext:WebServerApplicationContext接口的具體實(shí)現(xiàn)類,包含WebServer的引用,類定義如下:
  • 由繼承體系可知,繼承了GenericWebApplicationContext,在GenericWebApplicationContext中定義了ServletContext引用。
  • 由代碼注釋可知,Spring容器管理了一個(gè)ServletWebServerFactory引用,ServletWebServerFactory為WebServer實(shí)現(xiàn)類對(duì)象的工廠類,通過(guò)ServletWebServerFactory來(lái)創(chuàng)建servlet引擎WebServer,其中由ServletWebServerFactory創(chuàng)建的WebServer默認(rèn)在8080端口監(jiān)聽(tīng)請(qǐng)求,具體為在基類AbstractConfigurableWebServerFactory中定義。
  • 同時(shí)注冊(cè)到Spring容器的Servlet,Filter接口的實(shí)現(xiàn)類會(huì)自動(dòng)注冊(cè)到Servlet引擎,具體為應(yīng)用對(duì)應(yīng)的ServletContext。
  • AnnotationConfigServletWebServerApplicationContext:基于注解的Spring容器,繼承了ServletWebServerApplicationContext。
  • XmlServletWebServerApplicationContext:基于XML的Spring容器,繼承了ServletWebServerApplicationContext。

Servlet引擎體系

  • WebServer接口:聲明Servlet引擎啟動(dòng),關(guān)閉的方法,相應(yīng)的實(shí)現(xiàn)類實(shí)現(xiàn)這些方法來(lái)定義啟動(dòng)和關(guān)閉邏輯,而對(duì)Spring容器ServletWebServerApplicationContext而言,只需依賴這個(gè)接口即可,不依賴具體實(shí)現(xiàn),這也是遵循了依賴倒置設(shè)計(jì)原則。
  • ServletWebServerFactory接口:Servlet引擎WebServer的工廠接口,接口定義如下,聲明了getWebServer方法。也是遵循依賴倒置設(shè)計(jì)原則,即Spring容器ServletWebServerApplicationContext只依賴這個(gè)接口,具體為這個(gè)接口的getWebServer方法來(lái)獲取一個(gè)Servlet引擎WebServer對(duì)象,而該接口的具體實(shí)現(xiàn)類,負(fù)責(zé)實(shí)現(xiàn)這個(gè)接口。實(shí)現(xiàn)類包括:TomcatServletWebServerFactory,JettyServletWebServerFactory,UndertowServletWebServerFactory,具體在embedded包定義。

Spring容器和Servlet引擎啟動(dòng)過(guò)程

  • Spring容器是在ApplicationContext的refresh方法定義啟動(dòng)流程的,具體為在AbstractApplicationContext中定義refresh方法的流程模板:關(guān)于Servlet引擎的啟動(dòng),是在onRefresh和finishRefresh方法定義的,由onRefresh方法的注釋可知,這個(gè)方法是設(shè)計(jì)用來(lái)注冊(cè)有特殊功能的bean對(duì)象到Spring容器內(nèi)部的BeanFactory的。所以Spring容器的設(shè)計(jì)拓展性是很好的。
  • ServletWebServerApplicationContext的refresh方法,onRefresh方法,finishRefresh方法。其中onRefresh方法負(fù)責(zé)Server引擎和ServletContext的創(chuàng)建;finishOnRefresh方法負(fù)責(zé)Servlet引擎的啟動(dòng),即調(diào)用WebServer的start方法,然后在指定的端口,如8080,監(jiān)聽(tīng)客戶端的請(qǐng)求。
  • createWebServer方法實(shí)現(xiàn):創(chuàng)建servlet引擎WebServer和ServletContext。
  • startWebServer方法實(shí)現(xiàn):調(diào)用Servlet引擎的start方法完成啟動(dòng)。
  • 以下為T(mén)omcatWebServer的start方法實(shí)現(xiàn):啟動(dòng)應(yīng)用在Servlet規(guī)范中對(duì)應(yīng)的Context,即TomcatEmbeddedContext

總結(jié)

以上是生活随笔為你收集整理的springboot需要tomcat服务器吗_SpringBoot学习(二):内嵌服务器引擎(Tomcat,Jetty)实现原理...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。