Windows 环境下用 java 实现 web 服务器
实验报告
一、实验目的
(1)处理一个 http 请求 (2)接收并解析 http 请求
(3)从服务器文件系统中获得被请求的文件 (4)创建一个包括被请求的文件的 http 响应信息
(5)直接发送该信息到客户端
二、实验意义 通过本实验,使学生能够进一步理解 HTTP 协议的技术细节以及 WEB 服务器 的实现原理。
三、实验背景
HTTP 的英文全称是:HyperText Transport Protocol,即超文本传输协议,HTTP 是一个属于应用层的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。 它于 1990 年提出,经过几年的使用与发展,得到不断地完善和扩展。 HTTP 协议的运作方式: HTTP 协议是基于请求/响应模式的。一个客户机与服务器建立连接后,发送一个 请求给服务器,请求方式的格式为,统一资源标识符、协议版本号,后边是 MIME 信息, 包括请求修饰符、客户机信息和可能的内容。服务器接到请求后,给予相应的响应信息, 其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是 MIME 信息包括服务器信息、实体信息和可能的内容。最简单的情况可能是在用户代理(UA)和 源服务器(O)之间通过一个单独的连接来完成(见图 1.1)。
在 Internet 上,HTTP 通讯通常发生在 TCP/IP 连接之上。缺省端口是 TCP 80,但其它的端口也是可用的。 HTTP 协议的内部操作过程: 基于 HTTP 协议的客户/服务器模式的信息交换过程如图 1.2 所示,它分四个过程, 建立连接、发送请求信息、发送响应信息、关闭连接。
在 WWW 中,“客户”与“服务器”是一个相对的概念,只存在于一个特定的连接期间, 即在某个连接中的客户在另一个连接中可能作为服务器。WWW 服务器运行时,一直在 TCP80 端口(WWW 的缺省端口)监听,等待连接的出现。 HTTP 协议下客户/服务器模式中信息交换的实现: 1.建立连接 连接的建立是通过申请套接字(Socket)实现的。客户打开一个套接字并把它约束在一 个端口上,如果成功,就相当于建立了一个虚拟文件。以后就可以在该虚拟文件上写数 据并通过网络向外传送。 2.发送请求 打开一个连接后,客户机把请求消息送到服务器的停留端口上,完成提出请求动作。 HTTP/1.0 请求消息的格式为: re q u e s tl i n e (状态行) headers ( 0个或有多个)(响应头) b o d y 响应消息=状态行(通用信息头|响应头|实体头) CRLF 〔实体内容〕 状 态 行=HTTP 版本号 状态码 原因叙述 状态码表示响应类型 1×× 保留 2×× 表示请求成功地接收 3×× 为完成请求客户需进一步细化请求 4×× 客户错误 5×× 服务器错误 响应头的信息包括:服务程序名,通知客户请求的 URL 需要认证,请求的资源何 时能使用。 4.关闭连接 客户和服务器双方都可以通过关闭套接字来结束 TCP/IP 对话 附:HTTP 协议状态码含义如下表所示: HTTP 协议状态码的含义 号码 含义 ---------- \"100\" : Continue \"101\" : witching Protocols \"200\" : OK \"201\" : Created \"202\" : Accepted \"203\" : Non-Authoritative Information \"204\" : No Content \"205\" : Reset Content \"206\" : Partial Content \"300\" : Multiple Choices \"301\" : Moved Permanently \"302\" : Found \"303\" : See Other \"304\" : Not Modified \"305\" : Use Proxy \"307\" : Temporary Redirect \"400\" : Bad Request \"401\" : Unauthorized \"402\" : Payment Required \"403\" : Forbidden \"404\" : Not Found 7 \"405\" : Method Not Allowed \"406\" : Not Acceptable \"407\" : Proxy Authentication Required \"408\" : Request Time-out \"409\" : Conflict \"410\" : Gone \"411\" : Length Required \"412\" : Precondition Failed \"413\" : Request Entity Too Large \"414\" : Request-URI Too Large \"415\" : Unsupported Media Type \"416\" : Requested range not satisfiable \"417\" : Expectation Failed \"500\" : Internal Server Error \"501\" : Not Implemented \"502\" : Bad Gateway \"503\" : Service Unavailable \"504\" : Gateway Time-out \"505\" : HTTP Version not supported
四、实验结果
实验指导书里面的步骤是直接用jdk运行java程序,也可以使用eclipse来运行java文件。
在eclipse里面建立三个类,HttpServer,来运行服务器。 Request 来发送请求 Response 来接受相应。
写好的三个java类,
在HttpServer类中,定义了一个路径
System.getProperty(\"user.dir\") + File.separator + \"webroot\";
在工作空间中找到Java工程,新建一个webroot文件夹,
再建立一个html文件。 开始运行java程序:
点击运行
在浏览器中输入http://localhost:8080/aaa.html
Web服务器创建成功!!!!!