将 HTML 文件加载到输出流

Posted

技术标签:

【中文标题】将 HTML 文件加载到输出流【英文标题】:Loading a HTML file to an output stream 【发布时间】:2017-07-09 19:57:42 【问题描述】:

我目前正在尝试制作代理服务器。 我目前正在处理的部分是阻止某些 URL。

我创建了一个基本的 html 页面,只要输入一个被阻止的 URL,它就会显示出来,但它目前不工作。

这是我服务器那部分的代码。

Scanner scanner = new Scanner( new File("filePath") );
String htmlString = scanner.useDelimiter("\\Z").next();
scanner.close();
byte htmlBytes[] = htmlString.getBytes("UTF-8");
toClient.write(htmlBytes);

toClient 是我的浏览器的输出流,即

client = mySocket.accept();
OutputStream toClient = client.getOutputStream();

任何帮助表示赞赏,谢谢。

【问题讨论】:

文件filepath中有什么内容?您需要先将所有 HTTP 标头发送到客户端,以便浏览器理解它。 @SteveSmith 文件路径是我创建的一个基本 HTML 文件,它只是说 URL 被阻止。 您需要先发送正确的 HTTP 响应标头。 【参考方案1】:

响应必须包含以下标头信息。

OutputStream clientOutput = client.getOutputStream();

clientOutput.write("HTTP/1.1 200 OK\r\n".getBytes());
clientOutput.write(("ContentType: text/html\r\n").getBytes());
clientOutput.write("\r\n".getBytes());

Scanner scanner = new Scanner(new File("server.html"));
String htmlString = scanner.useDelimiter("\\Z").next();
scanner.close();
clientOutput.write(htmlString.getBytes("UTF-8"));

clientOutput.write("\r\n\r\n".getBytes());
clientOutput.flush();

【讨论】:

以上是关于将 HTML 文件加载到输出流的主要内容,如果未能解决你的问题,请参考以下文章

IO流-----(字节流)

输入流与输出流

为啥 Azure 流分析将数据输出到单独的文件?

使用java的输入,输出流将一个文本文件的内容按行读出,每读一行就顺序添加行号,并写入到另一个文件

使用java的输入输出流将一个文本文件的内容按行读取,每读一行就顺序添加行号,并写入到另一个文件中

字符输出流写文本文件WriterFileWriter BufferedReader