當用戶訪問一個url時,瀏覽器便會開始生成一個http請求.web
首先獲取http請求中所須要的參數,如url,cookie,User-Agent等,而後請求操做系統發出http請求.spring
操做系統接收到請求以後,接下來就是熟悉的OSI模型走一遍,生成最終在物理層傳輸的流,經過訪問DNS服務器傳遞給請求的目標ip.瀏覽器
當服務器接收到http請求以後,OSI模型再走一遍生成http報文傳遞給web容器.咱們這裏以tomcat,spring爲例.tomcat
首先來講一下tomcat接收到請求以後的行爲:服務器
當tomcat接收到請求以後會根據其server.xml這個配置文件去匹配http請求的url對應的host(項目),若是匹配到則會匹配這個host中的servlet,查找處理該url的servlet,找到以後便會執行對應的doGet或者doPost等等.cookie
咱們在部署一個web項目的時候,都會去配置web.xml,servlet就須要在這個文件中配置.咱們使用spring的話,咱們都會把DispatcherServlet這個類配置爲servlet,而這個類的做用就是用於接收請求,並將請求分發給對應的的controller.app
接下來是具體的接收請求過程:url
①當tomcat收到http請求以後,會根據請求內容生成HttpServletRequest對象和HttpServletResponse對象,而後根據server.xml中的配置,找到對應的host下對應url的servlet並將生成的兩個對象傳遞過去,這個時候若是是有效的請求的話,則會匹配到DispatcherServlet,以上tomcat的傳遞請求任務就完成了.spa
②DispatcherServlet會根據具體的請求去匹配context中的controller(具體是從handlerMapping中查找對應的handler,而後對應的HanlderAdaptor執行hanler方法),最後返回一個controller會結果給DispatcherServlet.操作系統
③DispatcherServlet收到controller返回的結果以後會處理異常,渲染視圖資源等,而後經過HttpServletResponse響應用戶的請求,即向用戶反饋http請求處理的結果以及相應資源.