欢迎访问宙启技术站
智能推送

如何使用Java网络编程函数创建HTTP服务器

发布时间:2023-05-31 23:59:04

Java网络编程是一种非常重要的技能,无论是进行客户端与服务器通信,还是进行服务器端的编程开发,都需要使用网络编程技能来处理网络数据传输。本文将从创建HTTP服务器的角度,向大家介绍在Java网络编程中如何使用Socket, ServerSocket, BufferedReader, PrintWriter等函数创建HTTP服务器。

一、创建Socket服务器

为了创建HTTP服务器,我们首先需要创建Socket服务器。Socket服务器可以理解为监听客户端请求的网络端口,一旦有客户端请求,Socket服务器就会进行连接并接收数据进行处理。下面介绍如何创建一个简单的Socket服务器:

public static void main(String[] args){
    ServerSocket serverSocket = null;
    Socket socket = null;
    BufferedReader reader = null;
    PrintWriter writer = null;
    try {
        // 创建ServerSocket服务器
        serverSocket = new ServerSocket(8080);
        System.out.println("服务器已经启动....");
        while (true) {
            // 监听客户端请求
            socket = serverSocket.accept();
            // 获取客户端请求数据
            reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            String line = null, request = "";
            while ((line = reader.readLine()) != null) {
                request += line;
            }
            System.out.println("客户端请求数据:" + request);
            // 响应客户端请求
            writer = new PrintWriter(socket.getOutputStream(), true);
            writer.println("HTTP/1.1 200 OK");
            writer.println("Content-Type: text/html; charset=utf-8");
            writer.println(""); // 必须加一个空行
            writer.println("Hello World.");
            // 关闭资源
            writer.close();
            reader.close();
            socket.close();
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        // 关闭资源
        try {
            if (writer != null) writer.close();
            if (reader != null) reader.close();
            if (socket != null) socket.close();
            if (serverSocket != null) serverSocket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

上面的代码中,我们首先创建了一个ServerSocket对象,并将其绑定到8080端口,然后进入一个无限循环,不断监听客户端连接请求。每当有一个客户端连接请求时,就创建一个Socket对象,并获取其输入流和输出流,接收并响应客户端请求。

如果我们运行上述代码,它将一直阻塞等待客户端的连接请求。为了测试部署上述代码是否成功,我们需要先启动一个Web浏览器(比如Chrome、Firefox等),然后在地址栏中输入:“http://127.0.0.1:8080”即可,如果一切正常,我们将能看到浏览器返回的结果是:“Hello World.”。

二、创建HTTP服务器

上面我们创建了一个简单的Socket服务器,那么如何创建一个HTTP服务器呢?下面将介绍如何在上述代码基础上进行改进,使其成为能够处理HTTP协议的网页服务器:

public static void main(String[] args){
    ServerSocket serverSocket = null;
    Socket socket = null;
    BufferedReader reader = null;
    PrintWriter writer = null;
    try {
        // 创建ServerSocket服务器
        serverSocket = new ServerSocket(8080);
        System.out.println("服务器已经启动....");
        while (true) {
            // 监听客户端请求
            socket = serverSocket.accept();
            // 获取客户端请求数据
            reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            String line = null, request = "";
            while ((line = reader.readLine()) != null && !line.isEmpty()) {
                request += line + "\r
"; // http请求头必须换行
            }
            System.out.println("客户端请求数据:" + request);
            // 响应客户端请求
            String response = "Hello World.";
            writer = new PrintWriter(socket.getOutputStream(), true);
            writer.println("HTTP/1.1 200 OK");
            writer.println("Content-Type: text/plain; charset=utf-8");
            writer.println("Content-Length: " + response.length());
            writer.println(""); // 必须加一个空行分隔
            writer.println(response);
            // 关闭资源
            writer.close();
            reader.close();
            socket.close();
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        // 关闭资源
        try {
            if (writer != null) writer.close();
            if (reader != null) reader.close();
            if (socket != null) socket.close();
            if (serverSocket != null) serverSocket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在HTTP协议中,我们需要遵循一定的规范来处理请求。首先是请求头,HTTP头部分可以被分为3个部分:

1. 请求行:包括请求方法、URI和协议版本,以空格分隔,结尾加上"\r

"换行符。

2. 请求头(可选):包括很多键值对,又叫请求参数。

3. 空行(必须):请求头和请求体之间必须有一个空行分隔。

以上是HTTP的请求格式。服务器需要响应格式要求如下:

1. 响应头:包括协议版本、状态码、状态描述和服务器类型信息,以空格和"\r

"分隔。

2. 响应头部其他信息(可选):用键值对的方式设置响应头部的其他信息。

3. 空行(必须):响应头和响应体之间必须有一个空行分隔。

3. 响应体:可以是HTML页面代码,图片等。

以上是HTTP协议的响应格式。在上述代码中,我们根据HTTP协议的格式规范修改了请求头和响应头,并且可以处理客户端请求,响应客户端请求。

总结:Java网络编程是一种非常重要的技能。在本文中,我们介绍了如何使用Socket, ServerSocket, BufferedReader, PrintWriter等函数创建HTTP服务器。通过本文的学习,相信你已经能够掌握如何使用Java进行网络编程,对于创建网络应用具备了更扎实的理论基础。