Tomcat的幾個知識點總結

Tomcat爲什麼要破壞雙親委派模型

這一點其實是Servlet規範裏面有提到,建議Servlet容器優先加載Web應用下的類。而實際上Tomcat也這麼做了,並且是通過破壞雙親委派模型去實現的。主要目的爲了實現各個Web應用的隔離性。因爲各個Web應用裏面可以用同名的Servlet,如果按照默認的雙親委派模型的話,那麼這些同名的Servlet最終都會成爲一個Servlet。所以Tomcat就破壞了雙親委派模型
破壞的方法,就是自定義一個WebApplicationClassLoader,繼承了ClassLoader類,然後重寫了loadClass()方法,因爲雙親委派模型就是在這裏實現。那在這個方法裏面,首先會去查看對應的類是否加載過了,加載過的話就不重複加載。否則的話,它先回去調用擴展類加載器進行加載,這樣做的目的是保證一些核心庫不被覆蓋,因爲雖然說優先加載Web應用下面的類,但是肯定有一個原則就是不能覆蓋核心類。如果擴展類加載器和啓動類加載器加載失敗的話,就直接進行自定義加載,也就是對應findClass()方法嘛。從而實現一個隔離性

Tomcat的IO模型

Tomcat的IO模型有三種,BIO,NIO(JDK4),NIO2(或者叫AIO,在JDK7加入),其實還有一個叫APR。

Tomcat如何生成Servlet

其實這個從兩個方面去說:

  • 從作用域角度,它可以分爲單例和復例。默認是單例的。也就是多個線程會共用一個Servlet,這是會產生線程安全問題。對於裏面的一些共享變量,可以用ThreadLocal去做;還有一個就是復例,如果Servlet實現了SingleThreadModel接口的話,那麼它就是復例的,一個請求到來的時候如果沒有空餘的Servlet,它會通過反射創建新的Servlet,當然不是無限的,最大可以創建20個Servlet,如果還不夠的話,接下來的請求會阻塞
  • 類型角度:分爲原本Servlet類,還有jsp文件。jsp文件最後也會變成servlet嘛,其實它會先對jsp文件進行解析成一棵結點樹,然後再變成一個java文件,然後最後編譯成爲一個servlet。

有幾種在Tomcat中部署Web應用的方法?

  • 就是應用放到webapp目錄下就可以了
  • 在conf文件裏面的server.xml配置文件,在host標籤下,添加context標籤,然後寫上路徑等信息,也可以部署
  • catalina目錄下,可以建立一個xml文件來配置
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章