上一篇講了使用者輸入url點選回車後DNS解析及CDN相關內容,這一次繼續往下講,講一個很重要的內容——SERVLET,先上兩張圖。
2-1 servlet執行簡圖
2-2 servlet程式參考圖
先看圖2-2,我們定義了一個TestServlet類,繼承了HttpServlet,並在web。xml做了配置,其中
Tomcat開始啟動時會將web。xml的各個配置項解析成相應的屬性儲存在WebXml物件中,然後將這些屬性設定到Context容器中,其中包括servlet物件,它會被包裝成Context容器中的StandardWrapper,也就是說在Tomcat裡面,Context容器直接管理Servlet在容器中的包裝類Wrapper,所以Context容器如何執行將直接影響Servlet的工作方式。
Wrapper。 loadServlet方法會獲取servletClass然後把它交給InstanceManager去建立一個基於servletClass。class的物件,2-2中的是DefaultServlet,如果是jsp就會是JspServlet,這兩個配置可以在Tomcat的conf/web。xml裡看到。物件建立好後就要開始初始化了,初始化Servlet在StandardWrapper的initServlet方法中,這個方法很簡單,就是呼叫Servlet的init()方法,同時把包裝了StandardWrapper物件的StandardWrapperFacade作為ServletConfig傳給Servlet,這樣Servlet物件就初始化完成了。
那麼服務端接收到url請求時,又是怎麼找到對應的servlet呢?Tomcat中有這樣一個類org。apache。tomcat。util。http。mapper,它儲存了Tomcat的Container容器中的所有子容器資訊,org。apache。catalina。connector。Request類在進入Container容器之前,Mapper會根據請求的url匹配每個Servlet中配置的
總結一下,瀏覽器傳送請求到服務端,服務端根據url找到對應的servlet,servlet生成資料後將資料返回給服務端,服務端再將響應資料給瀏覽器。