Rust从入门到实战系列二百四十三:返回真正的 HTML

让我们实现不只是返回空页面的功能。在项目根目录创建一个新文件,hello.html —— 也就是说,不是
在 src 目录。在此可以放入任何你期望的 HTML;列表 20-4 展示了一个可能的文本:
文件名: hello.html

Hello!

Hello!

Hi from Rust

示例 20-4: 一个简单的 HTML 文件用来作为响应 这是一个极小化的 HTML5 文档,它有一个标题和一小段文本。为了在 server 接受请求时返回它,需要 如示例 20-5 所示修改 handle_connection 来读取 HTML 文件,将其加入到响应的 body 中,并发送: 文件名: src∕main.rs 530 CHAPTER 20. 最后的项目: 构建多线程 WEB SERVER use std::fs; // --snip-- # use std::io::prelude::*; # use std::net::TcpListener; # use std::net::TcpStream; # # fn main() { # let listener = TcpListener::bind("127.0.0.1:7878").unwrap(); # # for stream in listener.incoming() { # let stream = stream.unwrap(); # # handle_connection(stream); # } # } # fn handle_connection(mut stream: TcpStream) { let mut buffer = [0; 1024]; stream.read(&mut buffer).unwrap(); let contents = fs::read_to_string("hello.html").unwrap(); let response = format!( "HTTP/1.1 200 OK\r\nContent-Length: {}\r\n\r\n{}", contents.len(), contents ); stream.write(response.as_bytes()).unwrap(); stream.flush().unwrap(); } 示例 20-5: 将 hello.html 的内容作为响应 body 发送 在开头增加了一行来将标准库中的 File 引入作用域。打开和读取文件的代码应该看起来很熟悉,因为第 十二章 I∕O 项目的示例 12-4 中读取文件内容时出现过类似的代码。 接下来,使用 format! 将文件内容加入到将要写入流的成功响应的 body 中。 使用 cargo run 运行程序,在浏览器加载 127.0.0.1:7878,你应该会看到渲染出来的 HTML 文件! 目前忽略了 buffer 中的请求数据并无条件的发送了 HTML 文件的内容。这意味着如果尝试在浏览器中 请求 127.0.0.1:7878∕something−else 也会得到同样的 HTML 响应。如此其作用是非常有限的,也不是大 部分 server 所做的;让我们检查请求并只对格式良好(well-formed)的请求 ∕ 发送 HTML 文件。
  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值