前言
此版本测试给客户端响应一个页面回去
在这个版本中我们要了解两个知识点:
1:HTML页面的基本语法。
2:HTTP响应的格式定义。因为只有基于该格式要求才能给客户端发送响应。
实现:
一、创建页面
-
在项目目录下新建一个目录webapps.
这个目录用于保存服务端所有的网络应用(webapp),每个网络应用在
webapps下单独以一个目录形式保存。目录命名就作为网络应用的名字。注意:每个网络应用相当于一个"网站",会包含如:页面、素材、以及用于
处理业务的逻辑代码。 - 在webapps下新建第一个子目录作为第一个网络应用取名为:myweb(如上图)
- 在myweb目录下新建第一个页面:index.html 通过该页面我们了解HTML页面的基本语法和结构。
- 页面如下(页面不是重点,比较简陋^_^):
<html> <head> <meta charset="UTF-8"> <title>我的首页</title> </head> <body> <center> <h1>百度</h1> <input type="text" size="32"> <input type="button" value="百度一下" onclick="alert('别点了!')"> </center> </body> </html>
二、响应回复
在ClientHandler中的第三步响应客户端中,将刚刚定义的页面通过发送一个标准的HTTP响应回复给客户端。
并测试浏览器在请求服务端后是否可以正确收到响应并将该页面展示到浏览器上。
(响应的具体格式参照第一篇文章)
上代码:
File file = new File("webapps/myweb/index.html");
OutputStream out = socket.getOutputStream();
//发送一个响应
//1.发送状态行
String line = "HTTP/1.1 200 OK";
out.write(line.getBytes("ISO8859-1"));
out.write(13);
out.write(10);
//2.发送响应头
line = "Content-Type: text/html";
out.write(line.getBytes("ISO8859-1"));
out.write(13);
out.write(10);
line = "Content-Length: "+file.length();
out.write(line.getBytes("ISO8859-1"));
out.write(13);
out.write(10);
//单独发送CRLF表示响应头发送完毕
out.write(13);
out.write(10);
//3.发送响应正文
FileInputStream fis = new FileInputStream(file);
int len;
byte[] data = new byte[1024 * 8];
while ((len = fis.read(data)) != -1) {
out.write(data, 0, len);
}
System.out.println("响应客户端完毕!");