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

可以看見(jiàn),已經(jīng)成功實(shí)現(xiàn)。注意 ,必須使用firefox,使用geogle和edge都不可以,原因是他們沒(méi)有解析tcp協(xié)議的數(shù)據(jù)。
我們?cè)诖位A(chǔ)上進(jìn)一步加深,讓游覽器訪問(wèn)服務(wù)器時(shí),服務(wù)器返回一個(gè)html的文件,然后游覽器進(jìn)行展示,編寫(xiě)代碼如下
@Test
public void myTomcat() throws IOException {
// 在 8888 端口進(jìn)行監(jiān)聽(tīng)
ServerSocket serverSocket = new ServerSocket(8888);
//當(dāng)服務(wù)器沒(méi)有關(guān)閉的時(shí)候一直等待連接
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) {
//寫(xiě)入數(shù)據(jù)
outputStream.write(bytes, 0, len);
}
//關(guān)閉輸出流和socket
outputStream.close();
socket.close();
}
//關(guān)閉服務(wù)器
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>運(yùn)行java文件后,游覽器訪問(wèn)localhost:8888,顯示如下

我們可以看見(jiàn)我們已經(jīng)成功了,但是游覽器并沒(méi)有把這個(gè)解析為html,這個(gè)問(wèn)題展示先不說(shuō),現(xiàn)在我們已經(jīng)用java實(shí)現(xiàn)了一個(gè)最簡(jiǎn)單tomcat,后面會(huì)慢慢的深入。
總結(jié)
本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
基于surging跨網(wǎng)關(guān)跨語(yǔ)言進(jìn)行緩存降級(jí)的問(wèn)題小結(jié)
surging是一款開(kāi)源的微服務(wù)引擎,包含了rpc服務(wù)治理,中間件,以及多種外部協(xié)議來(lái)解決各個(gè)行業(yè)的業(yè)務(wù)問(wèn)題,這篇文章主要介紹了如何基于surging跨網(wǎng)關(guān)跨語(yǔ)言進(jìn)行緩存降級(jí),需要的朋友可以參考下2024-05-05
關(guān)于Java Spring三級(jí)緩存和循環(huán)依賴(lài)的深入理解
對(duì)于循環(huán)依賴(lài),我相信讀者無(wú)論只是聽(tīng)過(guò)也好,還是有過(guò)了解也好,至少都有所接觸。但是我發(fā)現(xiàn)目前許多博客對(duì)于循環(huán)依賴(lài)的講解并不清楚,都提到了Spring的循環(huán)依賴(lài)解決方案是三級(jí)緩存,但是三級(jí)緩存每一級(jí)的作用是什么,很多博客都沒(méi)有提到,本篇文章帶你深入了解2021-09-09
jenkins按模塊進(jìn)行構(gòu)建遇到的問(wèn)題及解決方案
這篇文章主要介紹了jenkins按模塊進(jìn)行構(gòu)建的問(wèn)題及解決方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05
淺析Java如何優(yōu)雅的避免那無(wú)處不在的空指針異常
在Java編程語(yǔ)言中,NullPointerException(簡(jiǎn)稱(chēng)NPE)是一種常見(jiàn)的運(yùn)行時(shí)異常,本文主要來(lái)和大家講講如何優(yōu)雅的避免這些空指針異常,需要的可以參考下2024-03-03
JavaWeb實(shí)現(xiàn)簡(jiǎn)單用戶發(fā)送郵件
這篇文章主要為大家詳細(xì)介紹了JavaWeb實(shí)現(xiàn)簡(jiǎn)單用戶發(fā)送郵件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08
java按照模板導(dǎo)出pdf或word文件詳細(xì)代碼
有時(shí)候業(yè)務(wù)中我們需要使用pdf模板生成一份pdf文件,下面這篇文章主要給大家介紹了關(guān)于java按照模板導(dǎo)出pdf或word文件的相關(guān)資料,文中給出了詳細(xì)的代碼示例,需要的朋友可以參考下2023-11-11
Springboot項(xiàng)目實(shí)現(xiàn)將類(lèi)從@ComponentScan中排除
這篇文章主要介紹了Springboot項(xiàng)目實(shí)現(xiàn)將類(lèi)從@ComponentScan中排除,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11

