使用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端口,然后輸出一句話,編寫代碼如下
@Test public void myTomcat() throws IOException { // 在 8888 端口進(jìn)行監(jiān)聽 ServerSocket serverSocket = new ServerSocket(8888); //當(dāng)服務(wù)器沒有關(guān)閉的時(shí)候一直等待連接 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)閉服務(wù)器 serverSocket.close(); }
我們使用firefox進(jìn)行訪問(wèn),訪問(wèn)的網(wǎng)站為localhost:8888,firefox訪問(wèn)后的顯示為:
可以看見,已經(jīng)成功實(shí)現(xiàn)。注意 ,必須使用firefox,使用geogle和edge都不可以,原因是他們沒有解析tcp協(xié)議的數(shù)據(jù)。
我們?cè)诖位A(chǔ)上進(jìn)一步加深,讓游覽器訪問(wèn)服務(wù)器時(shí),服務(wù)器返回一個(gè)html的文件,然后游覽器進(jìn)行展示,編寫代碼如下
@Test public void myTomcat() throws IOException { // 在 8888 端口進(jìn)行監(jiān)聽 ServerSocket serverSocket = new ServerSocket(8888); //當(dāng)服務(wù)器沒有關(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) { //寫入數(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,顯示如下
我們可以看見我們已經(jīng)成功了,但是游覽器并沒有把這個(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)文章
java過(guò)濾器中Filter的ChainFilter過(guò)濾鏈
這篇文章主要介紹了java過(guò)濾器中Filter的ChainFilter過(guò)濾鏈,發(fā)送請(qǐng)求時(shí),如果有不符合的信息將會(huì)被filter進(jìn)行攔截,如果符合則會(huì)進(jìn)行放行。如果感興趣可以來(lái)學(xué)習(xí)一下2020-07-07SpringMVC結(jié)構(gòu)簡(jiǎn)介及常用注解匯總
這篇文章主要介紹了SpringMVC結(jié)構(gòu)簡(jiǎn)介及常用注解匯總,幫助大家更好的理解和學(xué)習(xí)使用SpringMVC,感興趣的朋友可以了解下2021-03-03通過(guò)Java實(shí)現(xiàn)對(duì)PDF頁(yè)面的詳細(xì)設(shè)置
這篇文章主要介紹了通過(guò)Java實(shí)現(xiàn)對(duì)PDF頁(yè)面的詳細(xì)設(shè)置,下面的示例將介紹通過(guò)Java編程來(lái)對(duì)PDF頁(yè)面進(jìn)行個(gè)性化設(shè)置的方法,包括設(shè)置頁(yè)面大小、頁(yè)邊距、紙張方向、頁(yè)面旋轉(zhuǎn)等,需要的朋友可以參考下2019-07-07基于Java事件監(jiān)聽編寫一個(gè)中秋猜燈謎小游戲
眾所周知,JavaSwing是Java中關(guān)于窗口開發(fā)的一個(gè)工具包,可以開發(fā)一些窗口程序,然后由于工具包的一些限制,導(dǎo)致Java在窗口開發(fā)商并沒有太多優(yōu)勢(shì),不過(guò),在JavaSwing中關(guān)于事件的監(jiān)聽機(jī)制是我們需要重點(diǎn)掌握的內(nèi)容,本文將基于Java事件監(jiān)聽編寫一個(gè)中秋猜燈謎小游戲2023-09-09