Java如何借助ServerSocket创建一个HTTP服务器呢?
下文笔者讲述ServerSocket创建一个HTTP服务器的方法及示例分享,如下所示
创建Http服务器的实现思路
HttpCallback.java package com.java265.http; public interface HttpCallback { byte[] onResponse(String request); }
HttpServer.java
package com.java265.http; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import java.util.concurrent.Executor; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class HttpServer { private boolean mRunning; private HttpCallback mCallback; public HttpServer(HttpCallback Callback) { this.mCallback = Callback; } public void startHttpServer(){ if(mRunning){ return; } mRunning = true; try { ServerSocket serverSocket = new ServerSocket(80); while (mRunning){ Socket accept = serverSocket.accept(); ExecutorService threadPool = Executors.newCachedThreadPool(); threadPool.execute(new HttpThread(accept, mCallback)); } } catch (IOException e) { e.printStackTrace(); } } }
HttpThread.java
package com.java265.http; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.Socket; public class HttpThread implements Runnable{ private Socket mSocket; private HttpCallback mCallback; public HttpThread(Socket socket, HttpCallback httpCallback){ mSocket = socket; mCallback = httpCallback; } @Override public void run() { try { BufferedReader reader = new BufferedReader(new InputStreamReader(mSocket.getInputStream())); String content; StringBuffer request = new StringBuffer(); while((content = reader.readLine()) != null && !content.trim().isEmpty()){ request.append(content).append("\n"); } System.out.println("request:\n" + request); byte[] response = new byte[0]; if(mCallback != null){ response = mCallback.onResponse(request.toString()); } String responseFirstLine = "HTTP/1.1 200 OK \r\n"; String responseHead = "Content-type:" + "text/html" + "\r\n"; OutputStream outputStream = mSocket.getOutputStream(); outputStream.write(responseFirstLine.getBytes()); outputStream.write(responseHead.getBytes()); outputStream.write("\r\n".getBytes()); outputStream.write(response); mSocket.close(); } catch (IOException e) { e.printStackTrace(); } } }
Main.java
package com.java265; import com.java265.http.HttpCallback; import com.java265.http.HttpServer; public class Main { public static void main(String[] args) { System.out.println("start http server"); HttpServer server = new HttpServer(new HttpCallback() { @Override public byte[] onResponse(String request) { return "Hello World".getBytes(); } }); server.startHttpServer(); } }
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。