用java实现下列功能1.当一个客户(浏览器)连接时,创建一个连接套接字; 2.从这个连接套接字接收 HTTP 请求; 3.解释该请求以确定所请求的特定文件; 4.从服务器的文件系统获得请求的文件; 5.创建一个由请求的文件组成的 HTTP 响应报文,报文前面有首部行; 6.经 TCP 连接向请求浏览器发送响应; 如果浏览器请求一个在该服务器中不存在的文件,服务器应当返回一个“404 Not Found”差错报文。
时间: 2024-02-16 20:00:34 浏览: 17
实现上述功能的基本思路如下:
1. 创建一个ServerSocket对象,监听指定的端口号;
2. 当有客户端请求连接时,使用accept方法接受连接请求,创建一个Socket对象;
3. 从Socket对象中获取输入流,读取HTTP请求报文;
4. 解析HTTP请求报文,获取所请求的文件名;
5. 判断该文件是否存在于服务器的文件系统中,如果不存在,返回“404 Not Found”错误报文;
6. 如果文件存在,读取文件内容,创建HTTP响应报文,并发送给客户端。
以下是Java代码示例:
```java
import java.io.*;
import java.net.*;
public class HttpServer {
public static void main(String[] args) throws IOException {
int port = 8080;
ServerSocket serverSocket = new ServerSocket(port);
System.out.println("HTTP Server started on port " + port);
while (true) {
Socket clientSocket = serverSocket.accept();
System.out.println("Connection established with " + clientSocket.getInetAddress());
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
String request = in.readLine();
System.out.println("Request received: " + request);
String[] tokens = request.split(" ");
String fileName = tokens[1];
File file = new File(fileName.substring(1));
OutputStream out = clientSocket.getOutputStream();
if (file.exists()) {
FileInputStream fileIn = new FileInputStream(file);
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = fileIn.read(buffer)) != -1) {
out.write(buffer, 0, bytesRead);
}
fileIn.close();
} else {
String response = "HTTP/1.1 404 Not Found\r\n\r\n";
out.write(response.getBytes());
}
out.close();
in.close();
clientSocket.close();
}
}
}
```