解释一下上面各行代码的含义
时间: 2023-07-02 14:17:15 浏览: 103
1. `import java.io.*;` 导入 Java 的 IO 库,用于读写文件和网络通信。
2. `import java.net.ServerSocket;` 和 `import java.net.Socket;` 导入 Java 的网络通信库,用于创建服务器端套接字和客户端套接字。
3. `public class WebServer {` 定义一个名为 `WebServer` 的公共类。
4. `public static void main(String[] args) throws IOException {` 定义一个名为 `main` 的公共静态方法,它可以接受一个字符串数组参数 `args`,并可能抛出一个 `IOException` 异常。
5. `ServerSocket serverSocket = new ServerSocket(8080);` 创建一个服务器套接字并将其绑定到本地 8080 端口。
6. `while (true) {` 创建一个无限循环,用于持续监听客户端的连接请求。
7. `Socket clientSocket = serverSocket.accept();` 接受一个客户端套接字的连接请求,如果没有请求到达,则阻塞等待。
8. `BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));` 创建一个输入流,用于从客户端套接字读取请求消息。
9. `String requestLine = in.readLine();` 读取请求消息的第一行,即请求行。
10. `String[] requestParts = requestLine.split(" ");` 将请求行按空格拆分成多个部分。
11. `String method = requestParts[0];` 获取请求的方法,如 GET、POST 等。
12. `String path = requestParts[1];` 获取请求的 URI 路径,如 /index.html。
13. `if (!method.equals("GET")) { clientSocket.close(); continue; }` 如果请求的方法不是 GET,则关闭客户端套接字并开始下一次循环。
14. `File file = new File("." + path);` 根据请求的 URI 路径创建一个文件对象。
15. `if (!file.exists()) { PrintWriter out = new PrintWriter(clientSocket.getOutputStream()); out.println("HTTP/1.1 404 Not Found"); out.println(); out.close(); continue; }` 如果请求的文件不存在,则向客户端套接字写入一个“404 Not Found”响应,并关闭客户端套接字并开始下一次循环。
16. `FileInputStream fileInputStream = new FileInputStream(file);` 创建一个输入流,用于读取请求的文件。
17. `byte[] data = new byte[(int) file.length()]; fileInputStream.read(data);` 读取文件内容,并存储在一个字节数组中。
18. `OutputStream outputStream = clientSocket.getOutputStream(); PrintWriter printWriter = new PrintWriter(outputStream);` 创建一个输出流,用于向客户端套接字写入响应消息。
19. `printWriter.println("HTTP/1.1 200 OK"); printWriter.println("Content-Type: text/html"); printWriter.println("Content-Length: " + file.length()); printWriter.println();` 写入响应消息的首部行和空行。
20. `outputStream.write(data);` 将请求的文件内容写入响应消息的主体部分。
21. `printWriter.close(); fileInputStream.close(); clientSocket.close();` 关闭输出流、输入流和客户端套接字。
22. `}` 关闭无限循环。
阅读全文