使用java模擬簡單的tomcat的方法詳解
我們現(xiàn)在已經(jīng)會使用tomcat了,但tomcat具體的原理還很模糊,下面我們使用java來簡單模擬一下tomcat,實現(xiàn)游覽器訪問8888端口,然后得到一個網(wǎng)頁進行展示。注意:這只是簡單模擬
我們接下來將會使用java里面的io和網(wǎng)絡(luò)的知識。首先先簡單一點,游覽器訪問8888端口,然后輸出一句話,編寫代碼如下
@Test public void myTomcat() throws IOException { // 在 8888 端口進行監(jiān)聽 ServerSocket serverSocket = new ServerSocket(8888); //當服務(wù)器沒有關(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)閉服務(wù)器 serverSocket.close(); }
我們使用firefox進行訪問,訪問的網(wǎng)站為localhost:8888,firefox訪問后的顯示為:
可以看見,已經(jīng)成功實現(xiàn)。注意 ,必須使用firefox,使用geogle和edge都不可以,原因是他們沒有解析tcp協(xié)議的數(shù)據(jù)。
我們在次基礎(chǔ)上進一步加深,讓游覽器訪問服務(wù)器時,服務(wù)器返回一個html的文件,然后游覽器進行展示,編寫代碼如下
@Test public void myTomcat() throws IOException { // 在 8888 端口進行監(jiān)聽 ServerSocket serverSocket = new ServerSocket(8888); //當服務(wù)器沒有關(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)閉服務(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>
運行java文件后,游覽器訪問localhost:8888,顯示如下
我們可以看見我們已經(jīng)成功了,但是游覽器并沒有把這個解析為html,這個問題展示先不說,現(xiàn)在我們已經(jīng)用java實現(xiàn)了一個最簡單tomcat,后面會慢慢的深入。
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
SpringMVC結(jié)構(gòu)簡介及常用注解匯總
這篇文章主要介紹了SpringMVC結(jié)構(gòu)簡介及常用注解匯總,幫助大家更好的理解和學(xué)習(xí)使用SpringMVC,感興趣的朋友可以了解下2021-03-03通過Java實現(xiàn)對PDF頁面的詳細設(shè)置
這篇文章主要介紹了通過Java實現(xiàn)對PDF頁面的詳細設(shè)置,下面的示例將介紹通過Java編程來對PDF頁面進行個性化設(shè)置的方法,包括設(shè)置頁面大小、頁邊距、紙張方向、頁面旋轉(zhuǎn)等,需要的朋友可以參考下2019-07-07