考虑到我发送给客户端的文件包含代表未来 HTTP 请求的其他链接文件,我想知道如何正确管理以下 HTTP 响应。
我知道我可以关闭 PrintWriter,这将向客户端指示正文已完成,但如果我这样做,我看不到如何接收对“first.html”中链接页面的后续请求。我尝试包含内容长度标头,但似乎我可能错误地计算了长度,因为在发送“first.html”块/停止后尝试从输入流中读取。这告诉我客户端没有意识到 first.html 文件已完成发送。我已经阅读了 RFC 2616,但坦率地说,如果没有适当的例子,我很难理解它。在协议方面,我是一个真正的孩子,所以任何帮助将不胜感激!
public static void main(String[] args) throws Exception{
ServerSocket serverSocket = new ServerSocket(80);
Socket clientSocket = serverSocket.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(),true);
String s;
while (!(s = in.readLine()).isEmpty()) {
System.out.println(s);
}
out.write("HTTP/1.0 200 OK\r\n");
out.write("Content-Type: text/html\r\n");
out.write("Content-Length: 1792\r\n");
out.write("\r\n");
File html = new File("/Users/tru/Documents/JavaScript/first.html");
BufferedReader htmlreader = new BufferedReader(new InputStreamReader(new FileInputStream(html)));
int c;
while((c = htmlreader.read()) > 0){
out.write(c);
}
}