當(dāng)前位置:
首頁(yè) >
前端技术
> javascript
>内容正文
javascript
springboot需要tomcat服务器吗_SpringBoot学习(二):内嵌服务器引擎(Tomcat,Jetty)实现原理...
生活随笔
收集整理的這篇文章主要介紹了
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)題。
- 上一篇: 影视大全app怎么好多都看不了
- 下一篇: postman 怎么调试pos_Spri