1. 程式人生 > 其它 >通過ServerSocket實現簡單web伺服器

通過ServerSocket實現簡單web伺服器

利用Java Socket編寫一個簡單的Web伺服器,具體如下:

(1)、使用 ServerSocket 監聽某一埠,然後等待連接獲取 Socket物件;

(2)、建立一個類 HttpServer 繼承 java.lang.Thread 類,重寫 run()方法,執行瀏覽器請求;

(3)、獲得瀏覽器請求,解析資原始檔路徑;

(4)、讀取資原始檔,響應給瀏覽器;

(5)、瀏覽器位址列輸入:http://localhost:8000/index.html

原始碼

package com;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class webserver {
    public static void main(String[] args) {
        try {
            ServerSocket serverSocket = new ServerSocket(8000);
            while(true){
                //伺服器套接字
                Socket socket = serverSocket.accept();
                new HttpServer(socket).start(); {
                };
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


}
package com;

import java.io.*;
import java.net.Socket;

public class HttpServer extends Thread {
    private Socket socket;
    public HttpServer(Socket socket) {
        this.socket=socket;
    }

    @Override
    public void run() {
        super.run();
        String filePath = "/index.html";
        File file=new File(System.getProperty("user.dir")+filePath);
        try {
            BufferedReader reader = new BufferedReader(new FileReader(file));
            System.out.println("reader  :" + reader);
            StringBuffer sb = new StringBuffer();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line).append("\r\n");
            }
            StringBuffer result = new StringBuffer();
            result.append("HTTP /1.1 200 ok \r\n");
            result.append("Content-Type:text/html \r\n");
            result.append("Content-Length:" + file.length() + "\r\n");
            result.append("\r\n" + sb.toString());
            OutputStream out=socket.getOutputStream();
            out.write(result.toString().getBytes());
            System.out.println(result.toString());
            out.flush();
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}