通過ServerSocket實現簡單web伺服器
阿新 • • 發佈:2021-03-10
利用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(); } } }