揭秘springboot集成tomcat原理
前言
曾幾何時,我們使用springboot后使用內(nèi)置的tomcat項目進(jìn)行啟動項目,但是這里是如何集成的可能我們并不清楚,本文發(fā)表一些筆者的理解和看法
在這里先拋出一些原生Tomcat作為web服務(wù)器的知識,Tomcat稱之為web容器,也可以稱之為servlet容器,原因如下:
- web容器:用來與我們的瀏覽器做交互,即與http請求做交互
- servlet容器:與http請求做交互的時候,如何調(diào)用我們的業(yè)務(wù)代碼呢?這個時候就需要我們的servlet規(guī)范了,各個web容器廠商只要實現(xiàn)servlet規(guī)范,即可制作自己的web容器了。而我們的業(yè)務(wù)代碼也可以基于servlet規(guī)范下進(jìn)行我們的業(yè)務(wù)代碼調(diào)用了。
servlet規(guī)范也就是我們常見的servlet-api.jar中定義的規(guī)范了,在原生tomcat里面也是默認(rèn)加載了該jar包。
springboot
在我們的springboot中使用了內(nèi)置的tomcat,servlet規(guī)范也使用了自己的類,主要類即ervlet.java類,代碼如下:
public interface Servlet {public void init(ServletConfig config) throws ServletException;public ServletConfig getServletConfig();public void service(ServletRequest req, ServletResponse res)throws ServletException, IOException;public String getServletInfo();public void destroy(); }主要也就是以上幾個方法,最關(guān)鍵的即是service方法來處理我們的業(yè)務(wù)代碼,這個類在servlet-api中也是這么定義的。
這就是我們的Servlet規(guī)范了
傳統(tǒng)項目
在我們以前使用springmvc的項目中都會在web.xml中配置DispatcherServlet,也就是把我們?nèi)我獾恼埱笕哭D(zhuǎn)發(fā)給DispatcherServlet的service
<servlet-name>dispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring-mvc.xml</param-value></init-param><load-on-startup>1</load-on-startup> </servlet> <servlet-mapping><servlet-name>dispatcherServlet</servlet-name><url-pattern>/</url-pattern> </servlet-mapping>DispatcherServlet
DispatcherServlet間接的實現(xiàn)了Servlet接口,實現(xiàn)了servlet規(guī)范,也就是我們只要在配置文件中定義DispatcherServlet,那么所有請求都可以轉(zhuǎn)發(fā)到DispatcherServlet中
在springboot中我們不在配置DispatcherServlet了,而是又springboot的自動裝配來默認(rèn)裝載,自動裝配的原理在此不做介紹,簡單的說就是默認(rèn)加載META-INF/spring.factories定義的類,然后我們就可以在spring.factories中找到我們的關(guān)鍵類DispatcherServletAutoConfiguration
在DispatcherServletAutoConfiguration里面有這么一個bean
這里也就可以看出來springboot默認(rèn)創(chuàng)建了一個DispatcherServlet來處理http請求
總結(jié)
通過上面分析,大致流程如下
從HttpServletRequest可以拿到我們的http頭、url請求等信息
看到這個流程,相信大家對應(yīng)tomcat處理http請求的流程就會有一個清晰的了解了,而springboot中的內(nèi)置tomcat,基本組件都是參考自原生Tomcat的,即使我們自己寫一個簡易的tomcat來處理請求也不是什么難事。
以上就是筆者對springboot中tomcat處理的一些見解!
總結(jié)
以上是生活随笔為你收集整理的揭秘springboot集成tomcat原理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [Leetcode][第332题][JA
- 下一篇: dns-prefetch—DNS预解析技