实验内容
1.使用Java平台的com.sun.net.httpserver包搭建一个简易HTTP server;
2.编辑网页(.html文档)存放在HTTP server端;
3.在浏览器端浏览HTTP server的网页;
4.使用抓包软件wireshark查看并分析HTTP请求和响应消息首部和数据。
基本要求
1.理解HTTP协议的工作过程;
2.了解HTTP请求消息和响应消息首部结构;
3.学会编写简单的HTML文档。
实验步骤
第1部分 建立简易HTTP服务器
- 查看本机IP地址
进入Dos命令窗口,输入命令ipconfig,查看本主机IP地址,下面是一个可能的显示结果:
以太网适配器 以太网:
连接特定的 DNS 后缀 . . . . . . . :
本地链接 IPv6 地址. . . . . . . . : f880::b1b2:e876:a385:4b82%16
IPv4 地址 . . . . . . . . . . . . : 192.168.1.100
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . : 192.168.1.1
在这个例子中,主机IPv4地址是192.168.1.100。
- 建立一个Java Application项目的包
打开NetBeans开发环境,在前面的实验中,我们曾在"D:\"盘下建立了一个Java Application项目,项目名称是javanetwork,项目所在文件夹是d:\javanetwork;在javanetwork项目中创建一个包,包名是demo.httpserver,在这个包下建立一个名为Server的类,复制下列Java代码,将其粘贴到Server类源码的编辑窗口。
java
//Server.java
package demo.httpserver;
import java.io.IOException;
import java.io.OutputStream;
import java.io.FileInputStream;
import java.io.BufferedInputStream;
import java.net.InetSocketAddress;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;
public class Server {
static int BUFF = 1024;
public static void main(String[] args) throws Exception {
HttpServer server = HttpServer.create(new InetSocketAddress("192.168.1.***",8000), 0);
server.createContext("/", new MyHandler());
System.out.println("HTTP Server starts... ...");
server.start();
}
static class MyHandler implements HttpHandler {
@Override
public void handle(HttpExchange t) throws IOException {
String path = t.getRequestURI().getPath();
if (path.equals("/"))
path = "/index.html";
OutputStream output;
try
{
t.sendResponseHeaders(200, 0);
output = t.getResponseBody();
BufferedInputStream in = new BufferedInputStream(new FileInputStream(path.substring(1, path.length())));
byte[] buf = new byte[BUFF];
int resp =in.read(buf);
while (resp != -1){
output.write(buf,0,resp);
resp = in.read(buf);
}
output.close();
}
catch(IOException ioe)
{
String resp = "Not Found";
t.sendResponseHeaders(404, resp.length());
output = t.getResponseBody();
output.write(resp.getBytes());
output.close();
}
}
}
}
将Server.java第15行
HttpServer server = HttpServer.create(new InetSocketAddress("192.168.1.***",8000), 0);
中的IPv4地址替换为第1步得到的主机IPv4地址。
- 建立index.html文档
在文件夹D:\javanetwork建立如下index.html文档,可使用记事本等文本编辑软件编辑此文件。
php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Java Server Test</title>
</head>
<body>
Hello, world!
</body>
</html>
- 运行Server
在NetBeans开发环境运行Server。 - 在本机使用浏览器浏览
打开Chrome浏览器,在地址栏输入http://<HTTP server的IP地址>:8000,或http://<HTTP server的IP地址>/index.html。例如,http://192.168.1.100:8000,观察浏览器的显示界面。 - 从其它主机的浏览器访问HTTP server
与另外一名同学合作,在另一台电脑打开Chrome浏览器,在地址栏输入http://<HTTP server的IP地址>:8000,或http://<HTTP server的IP地址>/index.html。例如,http://192.168.1.100:8000,查看是否出现预期结果。
是。 - 在Dos命令窗口运行Server
停止在NetBeans开发环境运行Server程序,将index.html拷贝到路径D:\javanetwork\build\classes
打开Dos命令窗口,进入路径
D:\javanetwork\build\classes,执行命令
java demo.httpserver.Server
命令成功执行后,Server则一直等待客户的请求。在Chrome浏览器地址栏输入http://<IP地址>:8000,或http://<IP地址>:8000/index.html,可看到浏览器的显示结果。如果要中断HTTP服务,按ctrl-C。
第2部分 修改index.html
按Ctrl-C键停止Dos窗口的HTTP服务,回到NetBeans集成开发环境,使用记事本等文本编辑软件编辑index.html。
HTML的<a>标记(tag)定义超链接,用于从一个页面链接到另一个页面。<a>标记最重要的属性是href,它指示链接的目标。在文件d:\javanetwork\index.html的元素<body></body>中增加一行:
<a href='Server.java'>start</a>
保存index.html,启动Server,使用浏览器浏览,然后点击超链接start,查看显示结果。
Server.java与index.html在不同文件夹,可以在index.html中指出Server.java的位置,例如<a href=".\src\demo\httpserver\Server.java">start</a>
其中.\表示当前目录。
HTML的<h1>到<h6>标记,定义六个不同大小的标题,例如:
<h4>实验三 HTTP</h4>HTML的
标记定义换行,此标记不需要结尾标记,例如:This is<br>an example<br>of line breaks.
修改d:\javanetwork\index.html,要求产生类似下图所示浏览效果:
其中链接Server Source Code指向Server.java, 链接Web Page指向index.html。点击Server Source Code后出现类似如下结果:
点击链接Web Page后出现类似如下结果:
第3部分 抓包
- 打开Wireshark,选择接口(网卡)为以太网,点击"捕获"->"选项",不勾选"在所有接口上使用混杂模式",点击"开始"按钮开始抓包;
- A,B两台主机一组,B运行Server程序;
- A使用浏览器访问B的Server;
- 待网页内容完整显示后,停止Wireshark抓包。