使用java模擬簡單的tomcat的方法詳解
我們現在已經會使用tomcat瞭,但tomcat具體的原理還很模糊,下面我們使用java來簡單模擬一下tomcat,實現遊覽器訪問8888端口,然後得到一個網頁進行展示。註意:這隻是簡單模擬
我們接下來將會使用java裡面的io和網絡的知識。首先先簡單一點,遊覽器訪問8888端口,然後輸出一句話,編寫代碼如下
@Test public void myTomcat() throws IOException { // 在 8888 端口進行監聽 ServerSocket serverSocket = new ServerSocket(8888); //當服務器沒有關閉的時候一直等待連接 while (!serverSocket.isClosed()){ //得到socket用於通訊 Socket socket = serverSocket.accept(); //得到輸出流 OutputStream outputStream = socket.getOutputStream(); //寫入數據 outputStream.write("this is myTomcat".getBytes()); //關閉輸出流和socket outputStream.close(); socket.close(); } //關閉服務器 serverSocket.close(); }
我們使用firefox進行訪問,訪問的網站為localhost:8888,firefox訪問後的顯示為:
可以看見,已經成功實現。註意 ,必須使用firefox,使用geogle和edge都不可以,原因是他們沒有解析tcp協議的數據。
我們在次基礎上進一步加深,讓遊覽器訪問服務器時,服務器返回一個html的文件,然後遊覽器進行展示,編寫代碼如下
@Test public void myTomcat() throws IOException { // 在 8888 端口進行監聽 ServerSocket serverSocket = new ServerSocket(8888); //當服務器沒有關閉的時候一直等待連接 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) { //寫入數據 outputStream.write(bytes, 0, len); } //關閉輸出流和socket outputStream.close(); socket.close(); } //關閉服務器 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,顯示如下
我們可以看見我們已經成功瞭,但是遊覽器並沒有把這個解析為html,這個問題展示先不說,現在我們已經用java實現瞭一個最簡單tomcat,後面會慢慢的深入。
總結
本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!