使用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的更多內容!  

推薦閱讀: