您好,登錄后才能下訂單哦!
這篇文章主要講解了“tomcat+spring mvc原理是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“tomcat+spring mvc原理是什么”吧!
tomat + spring mvc 是目前比較流行java微服務體系架構,包括現在的spring boot以及基于spring boot的進一步應用化封裝的spring cloud框架,底層都是基于tomcat + spring mvc的框架。因此學習tomcat + spring mvc的基礎原理,對于解決使用中出現的問題會有比較大的幫助。
理解tomcat+spring mvc的工作原理之前,最好能自己配置一下tomcat環境,然后部署一個spring mvc服務,實際感受一下整個流程,對tomcat和spring mvc暴露在外的配置有一個大概的了解。這樣有了感性的認識之后,再深入了解原理,會有比較好的理解。網上已經有很多比較詳細的關于tomcat環境搭建的文章,這里我就不再贅述。
傳統的使用tomcat + spring mvc框架的服務在開發之前,需要先行配置tomcat的環境。這個過程包括下載和安裝tomcat,配置環境變量,修改tomcat的配置文件,最后運行tomcat。對,你沒看錯,tomcat獨立運行,而spring mvc的服務是tomcat運行時加載的。基于spring mvc框架的服務可以在流行的java IDE中自動創建,比如eclipse或者idea。自動創建的工程基本配置已經寫入,你可以直接動手書寫業務代碼,這也是這種架構的顯著優勢。當然你也可以創建一個空的項目,自行配置。總的來說,spring mvc基于xml或者java代碼的config文件的配置是比較繁瑣的。項目最后需要打包成一個war文件,復制到tomcat的指定目錄下,tomcat會自動解包加載,然后基于你的配置,訪問指定端口的指定路由鏈接,就可以請求服務器的信息應答。
顯然,這種運作模式要求:tomcat需要有監視指定目錄,一旦有新的war包加入,就完成解包并動態加載編譯后的class的能力;tomcat需要有網絡端口開閉和監視的機制,維護線程池來處理隨時可能到來的請求;tomcat還需要將到來的請求順利地傳遞給spring mvc服務,然后再將服務返回的數據發送出去。
所謂容器(Container),并不是常說的用來存儲數據結構的類,比如Collection、Set、List等,而是專指tomcat和spring mvc中用來對功能和結構進行分層抽象的概念(類或者接口)。tomcat的基本容器結構如圖所示:
tomcat最頂層的容器Server,代表整個tomcat服務器,一個Server可以包含一個或者多個Service。一個Service包含一個或者多個Connetor,但是只能包含一個Container。Connector主要用來處理連接相關的事,比如網絡套接字Socket的監聽、請求request的接收和應答response的發送。這里的Container是一個抽象的概念,一個接口。其實是指一個Service只能包含一個Engine--Engine繼承自Container。Engine容器結構如圖所示:
其中Engine、Host、Context和Wrapper都繼承自Container。
Engine用來管理多個站點,即可以有多個Host。Host代表一個站點,其實是一個虛擬主機。Context,上下文,代表一套應用程序,一套應用程序總是有相同的應用上下文配置。最后是Wrapper,每個wrapper只有一個Servlet,而每個Servlet即對應每個開發的spring mvc服務程序。所以我們開發的spring mvc服務程序都是通過Wrapper加載到tomcat中。Context和Wrapper是動態添加的,我們在tomcat的指定目錄下每添加一個war包,tomcat加載war包時,就可以添加Context和Servlet。
之所以強調學習原理之前,最好先自己配置tomcat環境和部署一個spring mvc服務程序,是因為tomcat的很多配置和內部容器相關。外部感性理解和對內部原理的理性理解的結合,有益于認知的深入和記憶。
在tomcat的安裝目錄下(使用linux yum安裝的默認目錄在/usr/local/tomcat下,其他系統和安裝方法的目錄需要百度),有一個conf文件夾,里面存放著一些tomcat層次的容器配置。server.xml配置了Server容器下Service、Connector、Engine和Host的配置,格式類似上圖所顯示的嵌套結構,不過是以xml的形式。以其中一個Connector配置為例:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
上面說到Connector主要用來處理連接相關的事,比如網絡套接字Socket的監聽、請求request的接收和應答response的發送。所以這里就配置了端口、網絡協議、連接超時時間和重定向端口。其他容器的配置也比較類似,可以自行打開瀏覽一下。conf目錄下的context.xml文件存放Context容器的配置:
<Context> <!-- Default set of monitored resources. If one of these changes, the --> <!-- web application will be reloaded. --> <WatchedResource>WEB-INF/web.xml</WatchedResource> <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource> <!-- Uncomment this to disable session persistence across Tomcat restarts --> <!-- <Manager pathname="" /> --></Context>
內部主要包括了兩個web.xml的目錄配置。按照上文所講的容器結構,Context容器可以中可以有一個或者多個Wrapper,每個Wrapper中包含一個Servlet,Servlet就是我們開發的spring mvc 服務程序。web.xml里寫的是spring mvc Servlet的相關配置,一般的spring mvc項目中會有一個WEB-INF目錄,內部包含一個自己配置的web.xml文件。另一個是tomcat默認的web.xml的配置,可以看到就是conf目錄下的web.xml,這個默認配置是針對所有部署在tomcat中的spring mvc程序。具體關于web.xml配置內容的解釋,放在后面的spring mvc原理綜述中。
感謝各位的閱讀,以上就是“tomcat+spring mvc原理是什么”的內容了,經過本文的學習后,相信大家對tomcat+spring mvc原理是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。