再聊聊servlet在tomcat下面如何玩耍

「文章沒有寫完,晚些更」

從 Servlet 容器提及

要介紹 Servlet 必需要先把 Servlet 容器說清楚,Servlet 與 Servlet 容器的關係有點像槍和子彈的關係,槍是爲子彈而生,而子彈又讓槍有了殺傷力。雖然它們是彼此依存的,可是又相互獨立發展,這一切都是爲了適應工業化生產的結果。從技術角度來講是爲了解耦,經過標準化接口來相互協做。既然接口是鏈接 Servlet 與 Servlet 容器的關鍵,那咱們就從它們的接口提及。web

咱們這裏仍是以你們最爲熟悉 Tomcat 爲例來介紹 Servlet 容器如何管理 Servlet。Tomcat 自己也很複雜,咱們只從 Servlet 與 Servlet 容器的接口部分開始介紹。apache

Tomcat 的容器等級中,Context 容器是直接管理 Servlet 在容器中的包裝類 Wrapper,因此 Context 容器如何運行將直接影響 Servlet 的工做方式。tomcat

Tomcat 容器模型

圖 1 . Tomcat 容器模型

從上圖能夠看出 Tomcat 的容器分爲四個等級,真正管理 Servlet 的容器是 Context 容器,一個 Context 對應一個 Web 工程,在 Tomcat 的配置文件中能夠很容易發現這一點,以下:app

清單 1 Context 配置參數webapp

<Context path="/projectOne " docBase="D:\projects\projectOne" 
 reloadable="true" />

下面詳細介紹一下 Tomcat 解析 Context 容器的過程,包括如何構建 Servlet 的過程。ui

Servlet 容器的啓動過程

Tomcat7 也開始支持嵌入式功能,增長了一個啓動類org.apache.catalina.startup.Tomcat。建立一個實例對象並調用 start 方法就能夠很容易啓動 Tomcat,咱們還能夠經過這個對象來增長和修改 Tomcat 的配置參數,如能夠動態增長 Context、Servlet 等。下面咱們就利用這個 Tomcat 類來管理新增的一個 Context 容器,咱們就選擇 Tomcat7 自帶的 examples Web 工程,並看看它是如何加到這個 Context 容器中的。spa

清單 2 . 給 Tomcat 增長一個 Web 工程code

Tomcat tomcat = getTomcatInstance(); 
 File appDir = new File(getBuildDirectory(), "webapps/examples"); 
 tomcat.addWebapp(null, "/examples", appDir.getAbsolutePath()); 
 tomcat.start(); 
 ByteChunk res = getUrl("http://localhost:" + getPort() + 
               "/examples/servlets/servlet/HelloWorldExample"); 
 assertTrue(res.toString().indexOf("<h1>Hello World!</h1>") > 0);

清單 1 的代碼是建立一個 Tomcat 實例並新增一個 Web 應用,而後啓動 Tomcat 並調用其中的一個 HelloWorldExample Servlet,看有沒有正確返回預期的數據。xml

相關文章
相關標籤/搜索