用java写一个能实现下列功能的代码1.当一个客户(浏览器)连接时,创建一个连接套接字; 2.从这个连接套接字接收 HTTP 请求; 3.解释该请求以确定所请求的特定文件; 4.从服务器的文件系统获得请求的文件; 5.创建一个由请求的文件组成的 HTTP 响应报文,报文前面有首部行; 6.经 TCP 连接向请求浏览器发送响应; 如果浏览器请求一个在该服务器中不存在的文件,服务器应当返回一个“404 Not Found”差错报文。
时间: 2024-02-16 15:00:24 浏览: 62
http请求的java实现
下面是一个简单的Java代码示例,可以实现上述功能:
```java
import java.net.*;
import java.io.*;
public class SimpleHTTPServer {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(8080); // 创建服务器套接字并监听端口8080
while (true) {
Socket clientSocket = serverSocket.accept(); // 接收客户端连接请求
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); // 从套接字中获取输入流
OutputStream out = clientSocket.getOutputStream(); // 从套接字中获取输出流
String request = in.readLine(); // 读取HTTP请求报文的首部行
String[] requestTokens = request.split(" "); // 将首部行按空格分隔成多个部分
if (requestTokens.length != 3 || !requestTokens[2].startsWith("HTTP/")) {
// 如果首部行格式不正确,返回400 Bad Request响应报文
out.write("HTTP/1.1 400 Bad Request\r\nContent-Length: 0\r\n\r\n".getBytes());
} else {
String fileName = requestTokens[1].substring(1); // 提取请求的文件名(去掉开头的“/”)
File file = new File(fileName); // 创建文件对象
if (!file.exists()) {
// 如果文件不存在,返回404 Not Found响应报文
out.write("HTTP/1.1 404 Not Found\r\nContent-Length: 0\r\n\r\n".getBytes());
} else {
FileInputStream fileInputStream = new FileInputStream(file); // 创建文件输入流
byte[] buffer = new byte[1024];
int bytesRead = 0;
// 创建HTTP响应报文的首部行和内容
String responseHeader = "HTTP/1.1 200 OK\r\nContent-Length: " + file.length() + "\r\n\r\n";
out.write(responseHeader.getBytes());
// 将文件内容写入输出流
while ((bytesRead = fileInputStream.read(buffer)) != -1) {
out.write(buffer, 0, bytesRead);
}
fileInputStream.close(); // 关闭文件输入流
}
}
out.flush(); // 刷新输出流
clientSocket.close(); // 关闭套接字
}
}
}
```
这段代码创建了一个简单的HTTP服务器,可以接收客户端浏览器的连接请求,并根据请求内容返回相应的HTTP响应报文。其中,服务器监听的端口号为8080,可以根据实际情况进行修改。如果客户端请求的文件不存在,则返回404 Not Found响应报文;如果请求格式不正确,则返回400 Bad Request响应报文。
阅读全文