使用java模擬簡單的tomcat的方法詳解
我們現(xiàn)在已經(jīng)會使用tomcat了,但tomcat具體的原理還很模糊,下面我們使用java來簡單模擬一下tomcat,實現(xiàn)游覽器訪問8888端口,然后得到一個網(wǎng)頁進行展示。注意:這只是簡單模擬
我們接下來將會使用java里面的io和網(wǎng)絡的知識。首先先簡單一點,游覽器訪問8888端口,然后輸出一句話,編寫代碼如下
@Test
public void myTomcat() throws IOException {
// 在 8888 端口進行監(jiān)聽
ServerSocket serverSocket = new ServerSocket(8888);
//當服務器沒有關(guān)閉的時候一直等待連接
while (!serverSocket.isClosed()){
//得到socket用于通訊
Socket socket = serverSocket.accept();
//得到輸出流
OutputStream outputStream = socket.getOutputStream();
//寫入數(shù)據(jù)
outputStream.write("this is myTomcat".getBytes());
//關(guān)閉輸出流和socket
outputStream.close();
socket.close();
}
//關(guān)閉服務器
serverSocket.close();
}我們使用firefox進行訪問,訪問的網(wǎng)站為localhost:8888,firefox訪問后的顯示為:

可以看見,已經(jīng)成功實現(xiàn)。注意 ,必須使用firefox,使用geogle和edge都不可以,原因是他們沒有解析tcp協(xié)議的數(shù)據(jù)。
我們在次基礎(chǔ)上進一步加深,讓游覽器訪問服務器時,服務器返回一個html的文件,然后游覽器進行展示,編寫代碼如下
@Test
public void myTomcat() throws IOException {
// 在 8888 端口進行監(jiān)聽
ServerSocket serverSocket = new ServerSocket(8888);
//當服務器沒有關(guān)閉的時候一直等待連接
while (!serverSocket.isClosed()) {
//得到socket用于通訊
Socket socket = serverSocket.accept();
//得到輸出流
OutputStream outputStream = socket.getOutputStream();
//得到輸入流
BufferedInputStream bufferedInputStream = new BufferedInputStream(
new FileInputStream("src/hello.html"));
int len = 0;
byte[] bytes = new byte[1024];
while ((len = bufferedInputStream.read(bytes)) != -1) {
//寫入數(shù)據(jù)
outputStream.write(bytes, 0, len);
}
//關(guān)閉輸出流和socket
outputStream.close();
socket.close();
}
//關(guān)閉服務器
serverSocket.close();
}html文件如下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>hello</title>
</head>
<body>
<h1>this is myTomcat</h1>
</body>
</html>運行java文件后,游覽器訪問localhost:8888,顯示如下

我們可以看見我們已經(jīng)成功了,但是游覽器并沒有把這個解析為html,這個問題展示先不說,現(xiàn)在我們已經(jīng)用java實現(xiàn)了一個最簡單tomcat,后面會慢慢的深入。
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
基于surging跨網(wǎng)關(guān)跨語言進行緩存降級的問題小結(jié)
surging是一款開源的微服務引擎,包含了rpc服務治理,中間件,以及多種外部協(xié)議來解決各個行業(yè)的業(yè)務問題,這篇文章主要介紹了如何基于surging跨網(wǎng)關(guān)跨語言進行緩存降級,需要的朋友可以參考下2024-05-05
關(guān)于Java Spring三級緩存和循環(huán)依賴的深入理解
對于循環(huán)依賴,我相信讀者無論只是聽過也好,還是有過了解也好,至少都有所接觸。但是我發(fā)現(xiàn)目前許多博客對于循環(huán)依賴的講解并不清楚,都提到了Spring的循環(huán)依賴解決方案是三級緩存,但是三級緩存每一級的作用是什么,很多博客都沒有提到,本篇文章帶你深入了解2021-09-09
Springboot項目實現(xiàn)將類從@ComponentScan中排除
這篇文章主要介紹了Springboot項目實現(xiàn)將類從@ComponentScan中排除,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11

