新聞中心
這篇文章主要講解了“tomcat+spring mvc原理是什么”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“tomcat+spring mvc原理是什么”吧!
10年的龍勝網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。成都全網(wǎng)營銷的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整龍勝建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)從事“龍勝網(wǎng)站設(shè)計”,“龍勝網(wǎng)站推廣”以來,每個客戶項目都認(rèn)真落實執(zhí)行。
tomat + spring mvc 是目前比較流行java微服務(wù)體系架構(gòu),包括現(xiàn)在的spring boot以及基于spring boot的進一步應(yīng)用化封裝的spring cloud框架,底層都是基于tomcat + spring mvc的框架。因此學(xué)習(xí)tomcat + spring mvc的基礎(chǔ)原理,對于解決使用中出現(xiàn)的問題會有比較大的幫助。
tomcat + spring mvc的運作模式
理解tomcat+spring mvc的工作原理之前,最好能自己配置一下tomcat環(huán)境,然后部署一個spring mvc服務(wù),實際感受一下整個流程,對tomcat和spring mvc暴露在外的配置有一個大概的了解。這樣有了感性的認(rèn)識之后,再深入了解原理,會有比較好的理解。網(wǎng)上已經(jīng)有很多比較詳細(xì)的關(guān)于tomcat環(huán)境搭建的文章,這里我就不再贅述。
傳統(tǒng)的使用tomcat + spring mvc框架的服務(wù)在開發(fā)之前,需要先行配置tomcat的環(huán)境。這個過程包括下載和安裝tomcat,配置環(huán)境變量,修改tomcat的配置文件,最后運行tomcat。對,你沒看錯,tomcat獨立運行,而spring mvc的服務(wù)是tomcat運行時加載的?;趕pring mvc框架的服務(wù)可以在流行的java IDE中自動創(chuàng)建,比如eclipse或者idea。自動創(chuàng)建的工程基本配置已經(jīng)寫入,你可以直接動手書寫業(yè)務(wù)代碼,這也是這種架構(gòu)的顯著優(yōu)勢。當(dāng)然你也可以創(chuàng)建一個空的項目,自行配置??偟膩碚f,spring mvc基于xml或者java代碼的config文件的配置是比較繁瑣的。項目最后需要打包成一個war文件,復(fù)制到tomcat的指定目錄下,tomcat會自動解包加載,然后基于你的配置,訪問指定端口的指定路由鏈接,就可以請求服務(wù)器的信息應(yīng)答。
顯然,這種運作模式要求:tomcat需要有監(jiān)視指定目錄,一旦有新的war包加入,就完成解包并動態(tài)加載編譯后的class的能力;tomcat需要有網(wǎng)絡(luò)端口開閉和監(jiān)視的機制,維護線程池來處理隨時可能到來的請求;tomcat還需要將到來的請求順利地傳遞給spring mvc服務(wù),然后再將服務(wù)返回的數(shù)據(jù)發(fā)送出去。
tomcat內(nèi)部的基本容器構(gòu)成
所謂容器(Container),并不是常說的用來存儲數(shù)據(jù)結(jié)構(gòu)的類,比如Collection、Set、List等,而是專指tomcat和spring mvc中用來對功能和結(jié)構(gòu)進行分層抽象的概念(類或者接口)。tomcat的基本容器結(jié)構(gòu)如圖所示:
tomcat最頂層的容器Server,代表整個tomcat服務(wù)器,一個Server可以包含一個或者多個Service。一個Service包含一個或者多個Connetor,但是只能包含一個Container。Connector主要用來處理連接相關(guān)的事,比如網(wǎng)絡(luò)套接字Socket的監(jiān)聽、請求request的接收和應(yīng)答response的發(fā)送。這里的Container是一個抽象的概念,一個接口。其實是指一個Service只能包含一個Engine--Engine繼承自Container。Engine容器結(jié)構(gòu)如圖所示:
其中Engine、Host、Context和Wrapper都繼承自Container。
Engine用來管理多個站點,即可以有多個Host。Host代表一個站點,其實是一個虛擬主機。Context,上下文,代表一套應(yīng)用程序,一套應(yīng)用程序總是有相同的應(yīng)用上下文配置。最后是Wrapper,每個wrapper只有一個Servlet,而每個Servlet即對應(yīng)每個開發(fā)的spring mvc服務(wù)程序。所以我們開發(fā)的spring mvc服務(wù)程序都是通過Wrapper加載到tomcat中。Context和Wrapper是動態(tài)添加的,我們在tomcat的指定目錄下每添加一個war包,tomcat加載war包時,就可以添加Context和Servlet。
tomcat容器對應(yīng)的外部配置
之所以強調(diào)學(xué)習(xí)原理之前,最好先自己配置tomcat環(huán)境和部署一個spring mvc服務(wù)程序,是因為tomcat的很多配置和內(nèi)部容器相關(guān)。外部感性理解和對內(nèi)部原理的理性理解的結(jié)合,有益于認(rèn)知的深入和記憶。
在tomcat的安裝目錄下(使用linux yum安裝的默認(rèn)目錄在/usr/local/tomcat下,其他系統(tǒng)和安裝方法的目錄需要百度),有一個conf文件夾,里面存放著一些tomcat層次的容器配置。server.xml配置了Server容器下Service、Connector、Engine和Host的配置,格式類似上圖所顯示的嵌套結(jié)構(gòu),不過是以xml的形式。以其中一個Connector配置為例:
上面說到Connector主要用來處理連接相關(guān)的事,比如網(wǎng)絡(luò)套接字Socket的監(jiān)聽、請求request的接收和應(yīng)答response的發(fā)送。所以這里就配置了端口、網(wǎng)絡(luò)協(xié)議、連接超時時間和重定向端口。其他容器的配置也比較類似,可以自行打開瀏覽一下。conf目錄下的context.xml文件存放Context容器的配置:
WEB-INF/web.xml ${catalina.base}/conf/web.xml
內(nèi)部主要包括了兩個web.xml的目錄配置。按照上文所講的容器結(jié)構(gòu),Context容器可以中可以有一個或者多個Wrapper,每個Wrapper中包含一個Servlet,Servlet就是我們開發(fā)的spring mvc 服務(wù)程序。web.xml里寫的是spring mvc Servlet的相關(guān)配置,一般的spring mvc項目中會有一個WEB-INF目錄,內(nèi)部包含一個自己配置的web.xml文件。另一個是tomcat默認(rèn)的web.xml的配置,可以看到就是conf目錄下的web.xml,這個默認(rèn)配置是針對所有部署在tomcat中的spring mvc程序。具體關(guān)于web.xml配置內(nèi)容的解釋,放在后面的spring mvc原理綜述中。
感謝各位的閱讀,以上就是“tomcat+spring mvc原理是什么”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對tomcat+spring mvc原理是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!
新聞名稱:tomcat+springmvc原理是什么
轉(zhuǎn)載來于:http://fisionsoft.com.cn/article/pdgesj.html