2022年2022年简单Web服务器设计与实现课程设计 .pdf
《2022年2022年简单Web服务器设计与实现课程设计 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年简单Web服务器设计与实现课程设计 .pdf(24页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、计算机网络课程设计报告题目:简单 Web服务器设计与实现专业:学号:学生姓名:指导教师:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 24 页 - - - - - - - - - 简单 Web服务器的设计与实现第 - 1 - 页 共 24 页目录摘要 2 关键词 2 1. 前言 3 1.1 课程设计前准备 4 1.2 课程设计的内容 5 1.3 课程设计要求 5 1.4 课程设计平台 5 2. Web服务器的工作原理 5 2.1 HTTP 协议的作用原理 5 2.2 J
2、ava 开发语言相关知识与技术 6 3. 开发环境及套字接编程 11 3.1 Web 服务器的开发环境 11 3.2 Web 服务器的套接字编程 12 4. WEB 服务器的设计与实现 13 4.1 Web 服务器的程序设计流程 13 4.2 用 Java 实现 Web 服务器的主要设计步骤及程序 14 5. 测试运行 21 5.1 调试运行 21 6结束语 23 参考文献 24 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 24 页 - - - - - - - - -
3、 简单 Web服务器的设计与实现第 - 2 - 页 共 24 页摘要WWW 的工作基于客户机 /服务器计算模型,由Web 浏览器 (客户机 )和 Web 服务器(服务器 )构成,两者之间采用超文本传送协议(HTTP)进行通信, HTTP 协议的作用原理包括四个步骤: 连接,请求,应答,关闭应答。在课程设计中,系统开发平台为Win7,程序设计语言采用Java ,程序运行平台为 Eclipse。在程序设计中, 采用了结构化与面向对象两种解决问题的方法。程序通过调试运行,初步实现了设计目标,并且经过适当完善后,将可以应用在商业中解决实际问题。关键词Java ;HTTP;Web服务器名师资料总结 -
4、- -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 24 页 - - - - - - - - - 简单 Web服务器的设计与实现第 - 3 - 页 共 24 页1 前言Internet是目前世界上最大的计算机互联网络,与大家的生活、 学习、工作有着越来越密切的关系,它遍布全球,将世界各地各种规模的网络连接成一个整体,其用户群十分庞大,因此,建设一个好的Web站点对于一个机构的发展十分重要。近年来,随着网络用户要求的不断提高及计算机科学的迅速发展,特别是数据库技术在 Internet中的广泛应用
5、, Web站点向用户提供的服务将越来越丰富,越来越人性化。本课程设计主要解决由Web 浏览器 (客户机 )和 Web服务器 (服务器 )构成, 两者之间采用超文本传送协议( HTTP)进行通信的 Web服务器的程序设计。1.1 课程设计前准备以下的工作均是建立在大量的调查基础上的,是Web服务器开发前期准备工作所解决的问题。(1)Java简介Java是由 sun公司开发的一种新型的面向对象的程序设计语言,主要用于web 页面的设计1。Java语言的流行除了因为它能够编制嵌入HTML 文件中的 Applet 外,还在于 Java语言本身的面向对象、简单、平台无关性、安全性、多线程等特点。Java
6、语言的发展颇具传奇性,它与Internet 的 WWW 的迅猛发展是分不开的。由于其发展迅速,有人将它比喻为 Internet上的世界语。 前面讲到在 Internet上 Web页面的设计采用的是 HTML 语言,用户借助于Web浏览器(如 Netscape ,HotJava,IE 等) ,可以访问到远程 web服务器上静态的、具有超链接的Web页面2。(2)HTTP 协议简介HTTP 协议是应用层的协议, 定义了服务器端和客户端之间文件传输的沟通方式。HTTP 协议用于从 WWW 服务器传输超文本到本地浏览器的传送协议。由于HTTP 协议支持的服务不限于WWW ,还可以是其它服务,它允许用户
7、在统一的界面下,采用不同的协议访问不同的服务。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示等3。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 24 页 - - - - - - - - - 简单 Web服务器的设计与实现第 - 4 - 页 共 24 页1.2 课程设计的内容(1)熟悉 WWW 服务器和 WEB 服务器的工作原理;(2)熟悉套接字编程的相关知识;(3)完成一个简单的WEB
8、 服务器的设计与实现,要求能够通过HTTP GET 命令获得一个简单的 HTML 文件;(4)运行该服务器,并编写一个简单的HTML 文件完成测试。1.3 课程设计要求(1)按要求编写课程设计报告书,能正确阐述设计结果。(2)通过课程设计培养学生严谨的科学态度,认真的工作作风和团队协作。(3)学会文献检索的基本方法和综合运用文献的能力。(4)在老师的指导下,要求每个学生独立完成课程设计的全部内容。1.4 课程设计平台Windows7系统; Eclipse软件平台2 Web 服务器的工作原理2.1 HTTP 协议的作用原理WWW 是以 Internet作为传输媒介的一个应用系统,WWW 网上最基
9、本的传输单位是 Web 网页。 WWW 的工作基于客户机 /服务器计算模型,由Web 浏览器 (客户机 )和Web服务器 (服务器 )构成,两者之间采用超文本传送协议(HTTP)进行通信。 HTTP 协议是基于 TCP/IP 协议之上的协议, 是 Web浏览器和 Web服务器之间的应用层协议, 是通用的、无状态的、面向对象的协议。HTTP 协议的作用原理包括四个步骤:连接,请求,应答,关闭应答。HTTP 协议的作用原理包括四个步骤:(1) 连接: Web浏览器与 Web服务器建立连接,打开一个称为socket (套接字)的虚拟文件,此文件的建立标志着连接建立成功。(2) 请求: Web 浏览器
10、通过socket 向 Web 服务器提交请求。 HTTP 的请求一般是名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 24 页 - - - - - - - - - 简单 Web服务器的设计与实现第 - 5 - 页 共 24 页GET 或 POST命令(POST用于 FORM 参数的传递)。GET 命令的格式为:GET 路径/文件名 HTTP/1.0 。其中文件名指出所访问的文件,HTTP/1.0 指出 Web浏览器使用的HTTP 版本。(3) 应答:Web浏览器提交请求后
11、, 通过 HTTP 协议传送给 Web服务器。Web服务器接到后,进行事务处理,处理结果又通过HTTP 传回给 Web浏览器,从而在Web浏览器上显示出所请求的页面。例:假设客户机与 www.mycompany .com:8080/mydir/index.html 建立了连接, 就会发送GET命令: GET /mydir/index.html HTTP/1.0 。 主机名为http:/ 的Web 服务器从它的文档空间中搜索子目录mydir 的文件 index.html。如果找到该文件,Web服务器把该文件内容传送给相应的Web浏览器。为了告知Web 浏览器传送内容的类型, Web 服务器首先传
12、送一些HTTP 头信息,然后传送具体内容 (即 HTTP 体信息) , HTTP 头信息和 HTTP 体信息之间用一个空行分开。(4) 关闭连接:当应答结束后,Web 浏览器与Web 服务器必须断开,以保证其它Web浏览器能够与 Web服务器建立连接。2.2 Java开发语言相关知识与技术Java主要技术有:多线程, I/O 流操作,网络编程。2.2.1 java中的多线程及实现:Java是面向对象的程序语言,用Java 进行程序设计就是设计和使用类,Java为我们提供了线程类 Thread来创建线程,创建线程与创建普通的类的对象的操作是一样的,而线程就是 Thread类或其子类的实例对象。下
13、面是一个创建启动一个线程的语句:Thread thread1=new Thread(); file:/ 声明一个对象实例,即创建一个线程;Thread1.run(); file:/用 Thread类中的 run()方法启动线程;从这个例子,我们可以通过Thread()构造方法创建一个线程,并启动该线程。事实上,启动线程,也就是启动线程的run()方法,而 Thread类中的 run()方法没有任何操作语句,所以这个线程没有任何操作。 要使线程实现预定功能, 必须定义自己的 run()方法。Java中通常有两种方式定义run()方法:通过定义一个Thread类的子类,在该子类中重写run()方法
14、。 Thread子类的实例对象就是一个线程, 显然,该线程有我们自己设计的线程体run()方法,启动线程就启动了名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 24 页 - - - - - - - - - 简单 Web服务器的设计与实现第 - 6 - 页 共 24 页子类中重写的 run()方法。通过 Runnable接口,在该接口中定义run()方法的接口。所谓接口跟类非常类似,主要用来实现特殊功能,如复杂关系的多重继承功能。线程被实际创建后处于待命状态,激活(启动)线
15、程就是启动线程的run()方法,这是通过调用线程的start()方法来实现的。线程状态:1)New 当线程对象被创建时,处于该状态。2)Runnable:就绪状态,线程满足运行的所有条件但没有正在运行的线程位于该状态,有以下几种情况:a.处于 New 状态的线程执行start()。b.处于 Running状态的线程失去CPU。c.处于 Otherwise Block 状态的线程阻塞解除。d.处于 Lock Block 状态的线程阻塞解除。3)Running:运行状态处于运行状态的线程可能发生以下几种情况:a.线程运行结束,进入Dead状态。b.CPU 被分配给其它线程,进入Runnable状态
16、。c.满足 Otherwise Block 的条件,进入 Otherwise Block 状态。d.由于锁的原因无法执行,进入Lock Block 状态。e.由于等待的原因无法执行,进入Wait Block 状态。4)Dead :死亡状态线程运行结束,对于主线程main()结束,对于普通用户线程run()结束。5)Otherwise Block:阻塞状态,阻塞解除后进入Runnable状态a.调用 sleep() ,阻塞解除条件为阻塞时间满。b.调用 join(),阻塞解除条件为调用join()的线程执行结束。注意:线程进入该状态不会释放锁。6)Lock Block:锁阻塞状态,阻塞解除后进入
17、Runnable状态由于无法获得需要的锁而阻塞地线程进入该状态,阻塞解除条件为获得所需的锁。7)Wait Block:等待阻塞状态,阻塞解除后进入Lock Block 状态由于某个资源的原因必须进行等待,则进入该状态。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 24 页 - - - - - - - - - 简单 Web服务器的设计与实现第 - 7 - 页 共 24 页阻塞解除条件为其它线程调用该资源的notify()或 notifyAll() 。下面一个例子实践了如何
18、通过上述两种方法创建线程并启动它们:/ 通过 Thread类的子类创建的线程;class thread1 extends Thread file:/ 自定义线程的 run()方法;public void run() System.out.println(Thread1 is running); file:/通过 Runnable接口创建的另外一个线程;class thread2 implements Runnable file:/ 自定义线程的 run()方法;public void run() System.out.println(Thread2 is running); file:/程序的
19、主类 class Multi_Thread file:/声明主类; plubic static void mail(String args) file:/ 声明主方法; thread1 threadone=new thread1(); file:/ 用 Thread类的子类创建线程;Thread threadtwo=new Thread(new thread2(); file:/ 用 Runnable接口类的对象创建线程;threadone.start(); threadtwo.start(); file:/strat() 方法启动线程; 运行该程序就可以看出, 线程 threadone和 t
20、hreadtwo交替占用 CPU,处于并行运行状态。可以看出, 启动线程的 run()方法是通过调用线程的start()方法来实现的 (见上例中名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 24 页 - - - - - - - - - 简单 Web服务器的设计与实现第 - 8 - 页 共 24 页主类),调用 start()方法启动线程的 run()方法不同于一般的调用方法,调用一般方法时,必须等到一般方法执行完毕才能够返回start()方法,而启动线程的run()方法
21、后, start()告诉系统该线程准备就绪可以启动run()方法后,就返回start()方法执行调用start()方法语句下面的语句, 这时 run()方法可能还在运行, 这样,线程的启动和运行并行进行,实现了多任务操作。2.2.2 IO 字节流操作1)Java 中使用流的方式处理数据,基本的处理类为InputStream( 字节读入流 )和OutputStream( 字节输出流 )。2)可以使用各种过滤流对流数据进行过滤,实现各种附加功能。3)对字节流进行转换和包装可以获得字符流,字符流的基本处理流为Reader( 字符读入流 )和 Writer(字符输出流 )。a.字节流:InputStr
22、eam:int read()读入流中的一个字节并返回,数据存放在 int的低 8 位中;int read(byte)读 入流中 的若 干个 字节 ,存 放在 byte中 , 返 回读 入 字 节的 数量 ;int read(byte,int,int)读入流中的若干个字节,存放在byte中从第一个 int 参数开始 (索引),最大长度为第二个int参数的区间内。OutputStream :flush()将输出缓冲区中的信息写到真正的输出设备。调用方法: 输出缓冲区满:自动调用; 调用 close()时先调用 flush():自动调用; 手动调用 flush() 最常见的情况是产生异常时, 虽然在
23、 finally 中会对流执行 close(), 但在异常条件下,close()能保证对流的关闭,但在调用flush()时会有漏洞。b.字符流:优点:操作文本数据时比较直观,读入和写出都以char为基本单位。缺点:底层依然以字节流方式操作,所以在任何情况下都必须有转换的过程,效率相对较低。操作二进制数据时会存在编码问题,一般不使用字符流操作二进制数据。InputStreamReader :将字节读入流转为字符读入流。InputStreamReader(InputStream) : 使用默认字符集 (取决的 JVM)将 InpustStream转为InputStreamReader 。Input
24、StreamReader(InputStream, String):使用 String 指定的字符集将 InputStream转名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 24 页 - - - - - - - - - 简单 Web服务器的设计与实现第 - 9 - 页 共 24 页为 InputStreamReader 。OutputStreamWriter:将字符输出流转为字节输出流。OutputStreamWriter(OutputStream): 使 用 默 认
25、字 符 集 ( 取 决 于JVM) 将OutputStreamWriter转为 OutputStream 。OutputStreamWriter(OutputStream, String) : 使 用String指 定 的 字 符 集 将OutputStreamWriter转为 OutputStream 。BufferedReader :提供缓冲; readLine()。BufferedWriter:提供缓冲。PrintWriter:提供缓冲; print()、println() 等方法。注意:在开发中,一般使用BufferedReader和 PrintWriter 结合使用完成对字符流的过滤
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年2022年简单Web服务器设计与实现课程设计 2022 简单 Web 服务器 设计 实现 课程设计
限制150内