运行截图如下;
浏览器访问:
后端打印:
项目结构如下:
HttpCallback.java
package cn.it1995.http;
public interface HttpCallback {
byte[] onResponse(String request);
}
HttpServer.java
package cn.it1995.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 cn.it1995.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 cn.it1995;
import cn.it1995.http.HttpCallback;
import cn.it1995.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();
}
}
源码打包下载地址: