當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
springboot需要tomcat服务器吗_SpringBoot学习(二):内嵌服务器引擎(Tomcat,Jetty)实现原理...
生活随笔
收集整理的這篇文章主要介紹了
springboot需要tomcat服务器吗_SpringBoot学习(二):内嵌服务器引擎(Tomcat,Jetty)实现原理...
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
概述
- SpringBoot使用main方法啟動的一個重要特性是,不需要打包成war部署到Tomcat這種Servlet容器中,而是只需打包成jar,然后通過java或mvn等命令運行這個jar包,然后應用就可以在指定的端口監聽客戶端的連接請求了。
- 在SpringBoot內部主要是引用了embedded的Tomcat或Jetty等作為Servlet引擎,由該Servlet引擎負責接收Web請求并交給應用處理和生成響應,從而可以將應用打包成jar,直接在命令行啟動,以獨立進程的方式運行,無需依賴Tomcat等Servlet容器,但是可以實現跟部署到Tomcat中的war包一樣處理Web請求和響應。
接口設計
- 在接口設計層面,對Spring容器而言,是通過拓展ApplicationContext接口來增加Spring容器對Servlet引擎的支持;對Servlet引擎而言,則是定義了WebServer接口來代表Servlet引擎或者說是Web服務器,WebServer接口實現類為具體的Servlet引擎實現。
- Spring容器通過包含WebServer的引用來負責Servlet引擎的啟動關閉。同時與普通Servlet容器實現(如Tomcat)一樣,將Spring應用通過關聯一個ServletContext引用來建立與Servlet引擎的關聯,同時將自身保存為ServletContext引用的attribute。
- 應用自身在啟動的時候,會創建和啟動Spring容器,在Spring容器中通過該WebServer引用來啟動對應的Servlet引擎。并在啟動Servlet引擎過程中,創建該應用對應的ServletContext,由該ServletContext來間接建立當前應用與Servlet引擎的關聯。
Spring容器ApplicationContext體系
- WebServerApplicationContext接口:定義獲取WebServer引用的方法
- ServletWebServerApplicationContext:WebServerApplicationContext接口的具體實現類,包含WebServer的引用,類定義如下:
- 由繼承體系可知,繼承了GenericWebApplicationContext,在GenericWebApplicationContext中定義了ServletContext引用。
- 由代碼注釋可知,Spring容器管理了一個ServletWebServerFactory引用,ServletWebServerFactory為WebServer實現類對象的工廠類,通過ServletWebServerFactory來創建servlet引擎WebServer,其中由ServletWebServerFactory創建的WebServer默認在8080端口監聽請求,具體為在基類AbstractConfigurableWebServerFactory中定義。
- 同時注冊到Spring容器的Servlet,Filter接口的實現類會自動注冊到Servlet引擎,具體為應用對應的ServletContext。
- AnnotationConfigServletWebServerApplicationContext:基于注解的Spring容器,繼承了ServletWebServerApplicationContext。
- XmlServletWebServerApplicationContext:基于XML的Spring容器,繼承了ServletWebServerApplicationContext。
Servlet引擎體系
- WebServer接口:聲明Servlet引擎啟動,關閉的方法,相應的實現類實現這些方法來定義啟動和關閉邏輯,而對Spring容器ServletWebServerApplicationContext而言,只需依賴這個接口即可,不依賴具體實現,這也是遵循了依賴倒置設計原則。
- ServletWebServerFactory接口:Servlet引擎WebServer的工廠接口,接口定義如下,聲明了getWebServer方法。也是遵循依賴倒置設計原則,即Spring容器ServletWebServerApplicationContext只依賴這個接口,具體為這個接口的getWebServer方法來獲取一個Servlet引擎WebServer對象,而該接口的具體實現類,負責實現這個接口。實現類包括:TomcatServletWebServerFactory,JettyServletWebServerFactory,UndertowServletWebServerFactory,具體在embedded包定義。
Spring容器和Servlet引擎啟動過程
- Spring容器是在ApplicationContext的refresh方法定義啟動流程的,具體為在AbstractApplicationContext中定義refresh方法的流程模板:關于Servlet引擎的啟動,是在onRefresh和finishRefresh方法定義的,由onRefresh方法的注釋可知,這個方法是設計用來注冊有特殊功能的bean對象到Spring容器內部的BeanFactory的。所以Spring容器的設計拓展性是很好的。
- ServletWebServerApplicationContext的refresh方法,onRefresh方法,finishRefresh方法。其中onRefresh方法負責Server引擎和ServletContext的創建;finishOnRefresh方法負責Servlet引擎的啟動,即調用WebServer的start方法,然后在指定的端口,如8080,監聽客戶端的請求。
- createWebServer方法實現:創建servlet引擎WebServer和ServletContext。
- startWebServer方法實現:調用Servlet引擎的start方法完成啟動。
- 以下為TomcatWebServer的start方法實現:啟動應用在Servlet規范中對應的Context,即TomcatEmbeddedContext
總結
以上是生活随笔為你收集整理的springboot需要tomcat服务器吗_SpringBoot学习(二):内嵌服务器引擎(Tomcat,Jetty)实现原理...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 影视大全app怎么好多都看不了
- 下一篇: 限流是什么意思(抖音快手B站被限流的解决