Java如何借助ServerSocket创建一个HTTP服务器呢?

戚薇 Java经验 发布时间:2023-06-08 08:32:40 阅读数:2619 1
下文笔者讲述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();
    }
}
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaJingYan/202306/16861844026745.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者