tomcat應該都不陌生,我們經常會把寫好的**打包放在tomcat裡並啟動,然後在瀏覽器裡就能愉快的呼叫我們寫的**來實現相應的功能了,那麼tomcat是如何工作的?
一、tomcat工作原理
我們啟動tomcat時雙擊的startup.bat檔案的主要作用是找到catalina.bat,並且把引數傳遞給它,而catalina.bat中有這樣一段話:
bootstrap.class是整個tomcat 的入口,我們在tomcat原始碼裡找到這個類,其中就有我們經常使用的main方法:
這個類有兩個作用 :
原始碼不過多贅述,我們在這裡只需要把握整體架構,有興趣的同學可以自己研究下原始碼。tomcat的server.xml配置檔案中可以對應構架圖中位置,多層的表示可以配置多個:
即乙個由 server->service->engine->host->context 組成的結構,從裡層向外層分別是:
server:伺服器tomcat的頂級元素,它包含了所有東西。
service:一組 engine(引擎) 的集合,包括執行緒池 executor 和聯結器 connector 的定義。
engine(引擎):乙個 engine代表乙個完整的 servlet引擎,它接收來自connector的請求,並決定傳給哪個host來處理。
container(容器):host、context、engine和wraper都繼承自container介面,它們都是容器。
connector(聯結器):將service和container連線起來,註冊到乙個service,把來自客戶端的請求**到container。
context(上下文 ): 即 web 應用程式,乙個 context 即對於乙個 web 應用程式。
二、tomcat實現思路
實現以上效果整體思路如下:
1.serversocket占用8080埠,用while(true)迴圈等待使用者發請求。
2.拿到瀏覽器的請求,解析並返回url位址,用i/o輸入流讀取本地磁碟上相應檔案。
3.讀取檔案,不存在構建響應報文頭、html正文內容,存在則寫到瀏覽器端。
三、實現tomcat
工程檔案結構和pom.xml檔案:
1.httpserver核心處理類,用於接受使用者請求,傳遞http請求頭資訊,關閉容器
public class httpserver
catch (ioexception e)
// 等待使用者發請求
while (!shutdown)
}
catch (exception e)
}
}
public static void main(string args)
}
public class request
public void parse()
catch (ioexception e)
for (int j=0; j
}
//列印讀取的socket中的內容
system.out.print(request.tostring());
url = parseurl(request.tostring());
}
private string parseurl(string requeststring)
return null;
}
public string geturl()
}
3.建立response類,響應請求讀取檔案並寫回到瀏覽器
public class response
public void setrequest(request request)
public void sendstaticresource() throws ioexception
}else
}
catch (exception e)
finally
}
}
四、擴充套件點
2.抽象servlet類來轉碼處理請求和響應的業務。發過來的請求會有很多,也就意味著我們應該會有很多的servlet,例如:registerservlet、loginservlet等等還有很多其他的訪問。可以用到類似於工廠模式的方法處理,隨時產生很多的servlet,來滿足不同的功能性的請求。
Tomcat工作原理
tomcat內存在乙個process連線池,有請求過來會去連線池內獲取process物件對該請求進行處理,連線池有最小連線數和最大連線數,當前請求數超過最大連線數後超出的連線請求將會被丟棄,如果最大連線數設定為負數,則表示無最大連線數限制。乙個process物件接收到請求後不對請求做任何處理,直接建...
Tomcat工作原理
總體結構 tomcat 的結構很複雜,但是 tomcat 也非常的模組化,找到了 tomcat 最核心的模組,您就抓住了 tomcat 的 七寸 下面是 tomcat 的總體結構圖 從 上圖中可以看出 tomcat 的心臟是兩個元件 connector 和 container,關於這兩個元件將在後面...
Tomcat工作原理
engine容器 engine 容器比較簡單,它只定義了一些基本的關聯關係,介面類圖如下 它的標準實現類是 standardengine,這個類注意一點就是 engine 沒有父容器了,如果呼叫 setparent 方法時將會報錯。新增子容器也只能是 host 型別的,如下 public void ...