版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、兰州商学院本科生毕业论文(设计)论文(设计)题目:一个人web服务器的设计与实现学院、系:信息工程学院计算机科学与技术系专业(方向):计算机科学与技术年 级、 班: 2008级2班学生姓名:毛显淇指导教师:李兵年 月 日本人郑重声明:所呈交的毕业论文(设计)是本人在导师的指导下取得的成果。对 本论文(设计)的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。因本 毕业论文(设计)引起的法律结果完全由本人承担。本毕业论文(设计)成果归兰州商学院所有。特此声明毕业论文(设计)作者签名:WWW的工作基于客户机/服务器计算模型,由Web浏览器(客户机)和 Web服务器(服务器)构成,两者之间采用
2、超文本传送协议(HTTP)进行通信, HTTP协议的作用原理包括四个步骤:连接,请求,应答,关闭应答。在课程 设计中,系统开发平台为Win7,程序设计语言采用Java,程序运行平台为 Eclipse。在程序设计中,采用了结构化与面向对象两种解决问题的方法。 程序通过调试运行,初步实现了设计目标,并且经过适当完善后,将可以 应用在商业中解决实际问题。关键词Java; HTTP; Web服务器ABSTRACTWWWs work is based on client/ server computing model, by the Web browsing (client) and Web serve
3、r (server) constitute the Hypertext Transfer Protocol (HTTP) to communicate between the role of principle of the HTTP protocol, including foursteps: connect, request, response, closes the response. In curriculum design, system development platform for Win7, programming language using the Java progra
4、m is running platform forthe Eclipse. In program design, the use of structured and object-oriented two solutionto the problem. Program through the debugger to run, the initial realization of the design objectives, and properly perfect will can be applied in business to solve practical problems.Keywo
5、rds Java; HTTP; the Web server TOC o 1-5 h z 一、 前言-6 - HYPERLINK l bookmark32 o Current Document (一) 课程设计前准备-6 - HYPERLINK l bookmark38 o Current Document (二) 课程设计的内容-7 - HYPERLINK l bookmark46 o Current Document (三) 课程设计要求-7 -(四) 课程设计平台-7 -二、Web服务器的工作原-7 -(一) HTTP协议的作用原理-7 - HYPERLINK l bookmark60
6、o Current Document (二) Java开发语言相关知识与技术-9 - HYPERLINK l bookmark63 o Current Document 1、 java中的多线程及实现:-9 - HYPERLINK l bookmark83 o Current Document 2、I/O字节流操作-12 - HYPERLINK l bookmark93 o Current Document 3、 网络架构:-14 -三、 开发环境及套字接编程-15 -(一) Web服务器的开发环境-15 - HYPERLINK l bookmark111 o Current Document
7、 (二) Web服务器的套接字编程-16 - HYPERLINK l bookmark114 o Current Document 1、ServerSocket 类-16 -四、WEB服务器的设计与实现-17 -(一) Web服务器的程序设计流程-17 - HYPERLINK l bookmark136 o Current Document (二) 用Java实现Web服务器的主要设计步骤及程序-18 -五、 测试运行-25 -(一)调试运行-25 - HYPERLINK l bookmark141 o Current Document 六、结束语-28 - HYPERLINK l bookm
8、ark145 o Current Document 参考文献-29 - HYPERLINK l bookmark153 o Current Document 致谢-30 -一个WEB服务器的设计与实现一、刖言Internet是目前世界上最大的计算机互联网络,与大家的生活、学习、 工作有着越来越密切的关系,它遍布全球,将世界各地各种规模的网络连 接成一个整体,其用户群十分庞大,因此,建设一个好的eb站点对于一个 机构的发展十分重要。近年来,随着网络用户要求的不断提高及计算机科 学的迅速发展,特别是数据库技术在Internet中的广泛应用,Web站点向用 户提供的服务将越来越丰富,越来越人性化。本
9、课程设计主要解决由Web浏览器(客户机)和Web服务器(服务器)构 成,两者之间采用超文本传送协议(HTTP)进行通信的Web服务器的程序 设计。(一)课程设计前准备以下的工作均是建立在大量的调查基础上的,是Web服务器开发前期准 备工作所解决的问题。(1)Java简介Java是由sun公司开发的一种新型的面向对象的程序设计语言,主要用 于web页面的设计1。Java语言的流行除了因为它能够编制嵌AHTML文件 中的Applet外,还在于Java语言本身的面向对象、简单、平台无关性、安 全性、多线程等特点。Java语言的发展颇具传奇性,它与Internet的WWW的 迅猛发展是分不开的。由于其
10、发展迅速,有人将它比喻为Internet上的世 界语。前面讲到在Internet上Web页面的设计采用的是HTML语言,用户借助 于Web浏览器(如Netscape,HotJava, IE等),可以访问到远程web服务器 上静态的、具有超链接的Veb页面2。(2)HTTP协议简介HTTP协议是应用层的协议,定义了服务器端和客户端之间文件传输的 沟通方式。HTTP协议用于从WWWB务器传输超文本到本地浏览器的传送协 议。由于HTTP协议支持的服务不限于WWW,还可以是其它服务,它允许用户 在统一的界面下,采用不同的协议访问不同的服务。它可以使浏览器更加 高效,使网络传输减少。它不仅保证计算机正确
11、快速地传输超文本文档, 还确定传输文档中的哪一部分,以及哪部分内容首先显示等。(二)课程设计的内容(1)熟悉WWW服务器和WEB服务器的工作原理;(2)熟悉套接字编程的相关知识;(3)完成一个简单JWEB服务器的设计与实现,要求能够通过HTTP GET 命令获得一个简单HTML文件;(4)运行该服务器,并编写一个简单的ITML文件完成测试。(三)课程设计要求(1)按要求编写课程设计报告书,能正确阐述设计结果。(2)通过课程设计培养学生严谨的科学态度,认真的工作作风和团队 协作。(3)学会文献检索的基本方法和综合运用文献的能力。(4)在老师的指导下,要求每个学生独立完成课程设计的全部内容。(四)
12、课程设计平台Windows?系统;Eclipse软件平台二、Web服务器的工作原(一)HTTP协议的作用原理WWW是以Internet作为传输媒介的一个应用系统,WWW网上最基本的传 输单位是Web网页。WWW的工作基于客户机/服务器计算模型,由Web浏览器 (客户机)和Web服务器(服务器)构成,两者之间采用超文本传送协议(HTTP) 进行通信。HTTP协议是基于TCP/IP协议之上的协议,是Web浏览器和Web 务器之间的应用层协议,是通用的、无状态的、面向对象的协议。HTTP协 议的作用原理包括四个步骤:连接,请求,应答,关闭应答。HTTP协议的作用原理包括四个步骤:(1)连接:Web浏
13、览器与Web服务器建立连接,打开一个称为socket(套 接字)的虚拟文件,此文件的建立标志着连接建立成功。(2)请求:Web浏览器通过socket向Web服务器提交请求。HTTP的请求 一般是GET或POST命令(POST用于FORM参数的传递)。GET命令的格式为:GET 路径/文件名HTTP/1.0。其中文件名指出所访问的文件,HTTP/1.0指出Web 浏览器使用的HTTP版本。(3)应答:Web浏览器提交请求后,通过HTTP协议传送给Web服务器。 Web服务器接到后,进行事务处理,处理结果又通速TTP传回给Web浏览器, 从而在Web浏览器上显示出所请求的页面。例:假设客户机与:8
14、080/mydir/index.htm建立了 连接,就会发送GET命令:GET /mydir/index.html HTTP/1.0。主机名为 /的Web服务器从它的文档空间中搜索子目录 mydir的文件index.html。如果找到该文件,Web服务器把该文件内容传送 给相应的Web浏览器。为了告知Web浏览器传送内容的类型,Web服务器首先传送一些HTTP头 信息,然后传送具体内容(艮旧TTP体信息),HTTP头信息和HTTP体信息之间 用一个空行分开。关闭连接:当应答结束后,Web浏览器与Web服务器必须断开,以 保证其它Web浏览器能够与Web服务器建立连接。(二)Java开发语言相关
15、知识与技术Java主要技术有:多线程,I/O流操作,网络编程。1、java中的多线程及实现:Java是面向对象的程序语言,用lava进行程序设计就是设计和使用类, Java为我们提供了线程类Thread来创建线程,创建线程与创建普通的类的 对象的操作是一样的,而线程就是Thread类或其子类的实例对象。下面是 一个创建启动一个线程的语旬:Thread thread1=new Thread(); file:/声明一个对象实例,即创建 一个线程;Thread1.run(); file:/用Thread 类中的 run()方法启动线程;从这个例子,我们可以通过Thread()构造方法创建一个线程,并
16、启动 该线程。事实上,启动线程,也就是启动线程的un()方法,而Thread类中 的run()方法没有任何操作语句,所以这个线程没有任何操作。要使线程实 现预定功能,必须定义自己的run()方法。Java中通常有两种方式定义run() 方法:通过定义一个Thread类的子类,在该子类中重写run()方法。Thread子 类的实例对象就是一个线程,显然,该线程有我们自己设计的线程体un() 方法,启动线程就启动了子类中重写的run()方法。通过Runnable接 口,在该接口中定义run ()方法的接口。所谓接口跟类 非常类似,主要用来实现特殊功能,如复杂关系的多重继承功能。线程被实际创建后处于
17、待命状态,激活(启动)线程就是启动线程的 run()方法,这是通过调用线程的start()方法来实现的。线程状态:New当线程对象被创建时,处于该状态。Runnable:就绪状态,线程满足运行的所有条件但没有正在运行的 线程位于该状态,有以下几种情况:处于New状态的线程执行start()。处于Running状态的线程失去CPUO处于Otherwise Block状态的线程阻塞解除。处于Lock Block状态的线程阻塞解除。Running:运行状态处于运行状态的线程可能发生以下几种情况:线程运行结束,进ADead状态。CPU被分配给其它线程,进ARunnable状态。满足Otherwise
18、Block的条件,进AOtherwise Block状态。由于锁的原因无法执行,进ALock Block状态。由于等待的原因无法执行,进AWait Block状态。Dead:死亡状态线程运行结束,对于主线程main ()结束,对于普通用户线程run ()结束。Otherwise Block:阻塞状态,阻塞解除后进ARunnable状态a.调用sleep。,阻塞解除条件为阻塞时间满。b.调用join(),阻塞解除条件为调用join()的线程执行结束。注意:线程进入该状态不会释放锁。Lock Block:锁阻塞状态,阻塞解除后进入Runnable状态由于无法获得需要的锁而阻塞地线程进入该状态,阻塞
19、解除条件为获 得所需的锁。Wait Block:等待阻塞状态,阻塞解除后进/Lock Block状态由于某个资源的原因必须进行等待,则进入该状态。阻塞解除条件为其它线程调用该资源的notify()或notifyAll()。下面一个例子实践了如何通过上述两种方法创建线程并启动它们:/通过Thread类的子类创建的线程;class threadl extends Thread file:/自定义线程的run()方法;public void run()System.out.println(Thread1 is running.”);file:/通过Runnable接口创建的另外一个线程;class
20、thread2 implements Runnable file:/自定义线程的run()方法;public void run()System.out.println(T hread2 is running.);file:/程序的主类class Multi_Thread file:/ 声明主类;plubic static void mail(String args) file:/ 声明主方法;thread1 threadone=new thread1(); file:/用 Thread 类的子类创建线程;Thread threadtwo=new Thread(new thread2(); fi
21、le:/ 用 Runnable 接口类的对象创 建线程;threadone.start(); threadtwo.start(); file:/strat()方法启动线程;运行该程序就可以看出,线程threadone和threadtwo交替占用CPU,处 于并行运行状态。可以看出,启动线程的run()方法是通过调用线程的 start()方法来实现的(见上例中主类),调用start()方法启动线程的run() 方法不同于一般的调用方法,调用一般方法时,必须等到一般方法执行完 毕才能够返回start()方法,而启动线程的Tun()方法后,start()告诉系统 该线程准备就绪可以启动run()方法
22、后,就返回start()方法执行调用 start()方法语旬下面的语旬,这时run ()方法可能还在运行,这样,线程 的启动和运行并行进行,实现了多任务操作。2、I/O字节流操作Java中使用流的方式处理数据,基本的处理类为InputStream(字节 读入流)和OutputStream(字节输出流)。可以使用各种过滤流对流数据进行过滤,实现各种附加功能。对字节流进行转换和包装可以获得字符流,字符流的基本处理流为 Reader(字符读入流)和Writer(字符输出流)。a.字节流:InputStream: int read()读入流中的一个字节并返回,数据存放在int 的低8位中;int re
23、ad(byte)读入流中的若干个字节,存放在byte中, 返回读入字节的数量;int read(byte,int,int)读入流中的若干个字节, 存放在byte口中从第一个int参数开始(索引),最大长度为第二个int参数 的区间内。OutputStream: flush()将输出缓冲区中的信息写到真正的输出设备。调用方法:输出缓冲区满:自动调用;调用close()时先调用flush():自动调用;手动调用flush()最常见的情况是产生异常时,虽然在finally中会对流执行close(), 但在异常条件下,close()能保证对流的关闭,但在调用flush()时会有漏 洞。b.字符流:优点
24、:操作文本数据时比较直观,读入和写出都以Char为基本单位。缺点:底层依然以字节流方式操作,所以在任何情况下都必须有转换 的过程,效率相对较低。操作二进制数据时会存在编码问题,一般不使用 字符流操作二进制数据。InputStreamReader:将字节读入流转为字符读入流。InputStreamReader(lnputStream):使用默认字符集(取决的 JVM)将 InpustStream转为InputStreamReader。InputStreamReader(InputStream, String):使用 String 指定的字符 集将 InputStream转为InputStream
25、Reader。OutputStreamWriter:将字符输出流转为字节输出流。OutputStreamWriter(OutputStream):使用默认字符集(取决于JVM)将 OutputStreamWriter转为OutputStream。OutputStreamWriter(OutputStream, String): 使用String指定的字 符集将 OutputStreamWriter转为OutputStream。BufferedReader:提供缓冲;readLine()。BufferedWriter:提供缓冲。PrintWriter:提供缓冲;print。、println()等
26、方法。注意:在开发中,一般使用BufferedReader和PrintWriter合使用完成对字符流的过滤。3、网络架构:1)C/S网络架构客户端/服务器架构,通常情况下,数据存储在服务器端,客户端和服 务器端都有一个独立的应用程序,可以进行独立的操作,通过网络进行数 据传输。常用的传输协议包括:TCP/IP:基于连接的协议优点:由于是有连接的传输,对于数据的准确性是有保证的。缺点:系统资源占用较多。UDP/IP:无连接的协议(数据报)优点:系统资源占用少。缺点:无法保证传输的准确性。用途:对于数据少量丢失可以接受的应用。存在足够数据冗余的应用。2)B/S网络架构浏览器/服务器架构,在服务器端
27、完成几乎所有的功能(包括数据存 储),客户端的浏览器只完成和服务器交互和显示服务器传输的信息的功 能。常用的传输协议包括:http :超文本传输协议。https :支持多种加密操作的超文本传输协议。优点:客户端不需要安装任何附加软件,同时整个应用的升级也相对 简单。IP:通过IP Address和Port(端口)定位具体的应用;Port的有效范围 是065535,通常在开发应用时应避免使用L000以下的端口,1000以下有很 多端口被常用应用占用。IP Address在JDK5.0中支持4位或6位两种方式, 现在4位的占据主导地位,但将来会逐渐过渡至6位IP地址的模式。TCP/IP协议的实现:
28、ServerSocket类:服务器端使用,用于监听客户端的请求。Socket类:服务器端和客户端使用,用于完成具体通信的所有功能。UDP/IP协议的实现:DatagramSocket类:服务器端和客户端使用,用于实现通信的基本 功能。DatagramPacket类:服务器端和客户端使用,用于封装通信的内容 信息。三、开发环境及套字接编程(一)Web服务器的开发环境该课程设计是基于Java编程语言的设计的Web服务器,开发环境是 Eclipse 软件和 Java Swing。(1)Eclipse简介Eclipse是一个开放源代码的、基于Java的可扩展开发平台。 就其本身而言,它只是一个框架和一
29、组服务,用于通过插件和组件构建开 发环境。Eclipse附带了一个标准的插件集,包括Java开发工具Eclipse 采用的技术是IBM公司开发的(SWT),这是一种基于Java的窗口组件,类似Java本身提供的AWT和Swing窗口组件,Eclipse的插件机制是轻型软件组件 化架构。在富客户机平台上,Eclipse使用插件来提供所有的附加功能4。Java Swing概述Swing是不对等基于GUI工具箱的正式名字,它是Java基础类库的 一部分。完整的JFC十分庞大,其中包含的内容远远大于Swing GUI工具箱。 JFC特性不仅仅包含了 Swing组件,而且还包含了一个可访问6的VPI.
30、一个2D API和一个可拖拽的API。Swing拥有一个丰富、便捷的用户界面元素集合, 对底层平台依赖的很少,因此与平台相关的bug很少。Swing给予不同平台 的用户一致的感官效果5。(二)Web服务器的套接字编程Java提供了一个ServerSocket类,程序员可以很方便地用它编写服务 器程序。服务器套接字的基本功能类似于坐在电话机旁边等待呼叫到来。 从技术上讲,ServerSocket运行在服务器上并监听到来的TCP连接。每个ServerSocket都在服务器上的指定端口监听。当远程主机上 的客户Socket试图与指定端口建立连接时,服务器被激活,判定客户程序 与服务器的连接,并打开两
31、个主机之间固有的Socket。一旦与服务器套接 字建立了连接,则服务器就可以使用固有的Socket对象向客户机发送数据。 数据总是通过固有的套接字传递。1、ServerSocket 类ServerSocket类包含了用Java编写服务器程序的所有内容。它包括创 建新ServerSocket对象的构造器、在指定端口监听连接的方法,以及连接 建立后可以发送和接收数据时返回Socket对象的方法。此外,它还有设置 不同选项以及各种各样常用的方法,例如toString()方法。服务器的基本生命期是:利用ServerSocket()构造器在指定端口创建一个新的 ServerSocket;ServerSo
32、cket利用它的accept()方法在指定端口监听到来的连接。 accept。方法一直处于阻塞状态,直到有客户机试图建立连接。这时 accept()方法返回连接客户机何服务器的Socket;调用 getInputStream()方法、getOutputStream()方法或者两者都 调用来得到与客户机通信的输入流和输出流,具体调用哪一个方法还是两 者都调用与具体服务器的类型有关;服务器和客户机根据双方都承认的协议进行交互,直到关闭连接时 为止;服务器、客户机或两者均关闭连接;服务器返回步骤2,等待下一个连接到来。如果在4步花费的时间 很长或时间无限期,贝Ijvu-ftpd这样的传细nix服务器
33、会创建一个新的进程 来处理每个连接,从而使服务器在同一时刻可以为多个客户机提供服务。四、WEB服务器的设计与实现(一)Web服务器的程序设计流程根据上述HTTP协议的作用原理,实现GET请求的Web服务器程序的方法 如下:创建ServerSocket类对象,监听端口8080。这是为了区别于HTTP 的标准TCP/IP端口 80而取的;等待、接受客户机连接到端口8080,得到与客户机连接的socket;创建与socket字相关联的输入流instream和输出流outstream;从与socket关联的输入流instream中读取一行客户机提交的请求 信息,请求信息的格式为:GET路径/文件名HT
34、TP/1.0从请求信息中获取请求类型。如果请求类型是GET,则从请求信息 中获取所访问的HTML文件名。没有HTML文件名时,则以index.html作为文 件名;如果HTML文件存在,则打开HTML文件,把HTTP头信息和HTML文件 内容通过socket传回给Web浏览器,然后关闭文件。否则发送错误信息给Web 浏览器;关闭与相应Web浏览器连接的socket字。可以总结出Web服务器的设计流程并作出其设计流程图,如图4-1所示。图4-1 Web服务器的程序设计流程(二)用Java实现Web服务器的主要设计步骤及程序1.点击开始,打开eclipse软件,在左框内建立Java工程,在工程中分
35、 别建立相应的包和类,如图3-2所示。日矽课设田.瘩 webroot 白击 webserverHttp Server.javaT| Request.java亩回 Response.ava|由W J RE累统库jre6,覆 config.ini图4-2在工程中分别建立相应的包和类设计主函数程序在Java工程中建立包webserver和类HttpServer、Request、Response,在对应框中输入以下程序代码:HttpServer.javapackage webserver;import java.io.File;import java.io.FilelnputStream;import
36、 java.io.FileOutputStream;import java.util.Properties;import java.io.IOException;import java.util.Enumeration;import .ServerSocket;import .Socket;import java.io.InputStream;import java.io.OutputStream;import java.io.PrintStream;public class HttpServerprivate int iPort = 8080; /default portpublic sta
37、tic String Basic_Root=System.getProperty(user.dir);public static String WEB_ROOT = System.getProperty(user.dir) + File.separator + webroot;public static int count=0;public HttpServer()System.out.println(欢迎使用Web服务器,本服务器只支持静态网页。);System.out.println(”检查配置文件及网页文件夹.”);getConfig();start();public static vo
38、id main(String args)HttpServer httpserver = new HttpServer();private void getConfig()File fileCon=new File(Basic_Root,config.ini);File fileDir=new File(WEB_ROOT);File fileWeb=new File(WEB_ROOT,index.htm);if(!fileCon.exists()System.out.println(配置文件 Config.ini 损坏,重建中.”); reBuildConfig(fileCon);if (!fi
39、leDir.exists()System.out.println(网页存放文件夹不存在,重建中.”); fileDir.mkdir();System.out.print(完成!请在”);System.out.println(WEB_ROOT+中放置网页文件.);System.out.println(Web 服务器将重新初始化.”); getConfig();if (!fileWeb.exists()reBuildWeb(fileWeb);Properties pps = new Properties();trypps.load(new FileInputStream(config.ini);E
40、numeration enumer = pertyNames();String strKey = (String) enumer.nextElement();String strValue = pps.getProperty(strKey);if (strValue.equals() != true)WEB_ROOT = strValue;System.out.println(-网页文件的存放路径为:+WEB_ROOT);strKey = (String) enumer.nextElement();strValue = pps.getProperty(strKey);if (strValue.
41、equals() != true)iPort = Integer.parseInt(strValue);System.out.println(Web 服务器访问端口为:+iPort);System.out.println(您可以修改Config.ini文件重新设定以上配置”);System.out.println(启动检查完成,服务器初始化中.”);catch (lOException ex)ex.printStackTrace();public void start()System.out.println(Web 服务器启动中.”); ServerSocket serverSocket;tr
42、yserverSocket = new ServerSocket(iPort);System.out.println(Web 启动完成!”);System.out.println(您现在可以在浏览器中访问 HYPERLINK http:/localhost:8080/,%e4%bb%a5%e6%b5%8b%e8%af%95%e6%9c%8d%e5%8a%a1%e5%99%a8 http:/localhost:8080/,以测试服务器是否运行)while (true)Socket socket = null;lnputStream input = null;OutputStream output
43、 = null;System.out.println(-等待连接.);socket = serverSocket.accept();System.out.println(socket.getInetAddress().toString()+请求连接”);input=socket.getInputStream();output=socket.getOutputStream();System.out.println(服务器开始处理第+(+count)+次连接”);开始处理并分析请求信息Request request=new Request(input);request.parse();开始发送请求
44、资源Response response=new Response(output);response.setRequest(request);response.sendStaticResource();关系连接socket.close();System.out.println(连接已关闭!”);catch(Exception ex)ex.printStackTrace();System.out.println(3”);/continue;private void reBuildConfig(File file)tryfile.createNewFile();FileOutputStream fo
45、s=new FileOutputStream(file);PrintStream sp=new PrintStream(fos);sp.println(WEB_ROOT=);sp.println(PORT=);sp.close();System.out.println(配置文件Config.ini创建成功,您可以修改WEB_ROOT的值改变网页文件的存放路径,修改PORT的值改变访问端口 !);catch (IOException ex)ex.printStackTrace();System.out.println(重建配置文件 Config.ini 失败”);System.out.print
46、ln(服务器将使用默认配置.”);private void reBuildWeb(File file)tryfile.createNewFile();FileOutputStream fos=new FileOutputStream(file);PrintStream sp=new PrintStream(fos);sp.println();sp.println();sp.println(简单 Web 服务器);sp.println();sp.println();sp.println(服务器已经成功运行 );sp.println();sp.println();sp.close();catch
47、(Exception ex)ex.printStackTrace();Request.javapackage webserver;import java.io.InputStream;public class Requestpublic Request()private Inputstream input;private String uri;public Request(Inputstream input)this.input = input;public void parse()/ 取得请求信息StringBuffer request = new StringBuffer(2048);in
48、t i;byte buffer = new byte2048;tryi = input.read(buffer);catch (Exception ex)ex.printStackTrace();i = -1;for (int j = 0; j index1)return requestString.substring(index1 + 1, index2); return null;public String getUri()if (pareTo(/)=0)uri=/index.htm;if (uri.indexOf(.)=-1)uri+=.htm”; return uri;Response
49、.javapackage webserver;import java.io.OutputStream;import java.io.IOException;import java.io.FileInputStream;import java.io.File;public class Responseprivate static final int BUFFER_SIZE = 1024;Request request;OutputStream output;public Response(OutputStream output)this.output = output;public void s
50、etRequest(Request request)this.request = request;public void sendStaticResource()/ 发送请求资源throws IOExceptionbyte bytes = new byteBUFFER_SIZE;FileInputStream fis = null;tryFile file = new File(HttpServer.WEB_ROOT, request.getUri(); if (file.exists() System.out.println(开始发送用户请求资源.”); fis = new FileInpu
51、tStream(file);int ch = fis.read(bytes, 0, BUFFER_SIZE);while (ch != -1)output.write(bytes, 0, ch);ch = fis.read(bytes, 0, BUFFER_SIZE);System.out.println(发送完毕!”);elseSystem.out.println(用户请求的资源不存在”);String errorMessage = HTTP/1.1 404 File Not Foundrn +Content-Type:text/htmlrn +rn +File Not Found;outp
52、ut.write(errorMessage.getBytes();catch (Exception ex)ex.printStackTrace();System.out.println(获取请求资源错误,请检查本地资源设置!”);System.exit(1);if (fis != null)fis.close();五、测试运行(一)调试运行为了确保上述程序的正确性,进行调试运行,在工程文件的webroot中建立html文件,在index.html文件中输入“服务器已经成功运行大 家好,我叫王胜,0900380224,桂林电子科技大学网络工程学生”如下 图5-2所示。寸 O&OO3SO224X服
53、务器已经成功运行大家好,我叫王胜,0900380224,桂林电子科技大学网络工程 学生图5-1在index.html文件中如图字样问题Javadoc目控制含浸III问题Javadoc目控制含浸WebServerMain Java 应用程序D:Program FiIesJavajre6binjavaw.exe ( 2012-3-9 下午 11:26:2了 右击运行HttpServer服务器结果显示为如图5-2所示:欢迎使用Wet:服务器,本服务器只支持静态网页。*检查酣置文件媛网页文件夹. 网页文件的存袖路径为:F:JAVA workspaceXil设X睥Moot we匕服务器访问端口为:momo 您可以修改Config,件重新设定以上酣置启动检查完成,服务器初始化中.三Wet服务器启动中. Web启动元成! 您现在可以在浏览器中访问:云圮:/localnost: SOSO/index. :itml,以刻试服务器是否运行图5-2运行应用程
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医生聘用合同(2026版)
- 南阳邓州市城区学校选调教师笔试真题2025
- 2026 年秋季初一开学第一课初中新生收心归位动员主题
- 冀教版七年级下册生物跟踪训练:食品安全(解析版)
- 食品厂投诉处理办法
- 家电企业质量管理细则
- 湖南株洲市炎陵县2025-2026学年八年级上学期期末质量监测物理试题
- 2027年高考语文备考之42个中国古典文学典故
- 七年级(下)生物知识清单
- 中商产业研究院-2026年中国DRAM行业市场前景预测研究报告
- 2026年上海(中考)语文考试试题含答案
- 连云港市东海县招聘事业单位人员考试真题2025
- 2026年飞控算法工程师(无人机稳定控制)试题及答案
- 2026中国脑卒中康复治疗指南
- 道路工程监理旁站要点
- 人教版九年级上册数学《习题29.1》教学课件(新教材)
- 隧道施工爆破培训课件
- 烟供.火供.火施仪轨
- 非开挖水平定向钻牵引管专项施工方案实用文档
- 销售合同简易模板
- 2023年葫芦岛市龙港区幼儿园教师招聘笔试《幼儿保教知识与能力》模拟试题及答案解析
评论
0/150
提交评论