2022年2022年简单Web服务器设计与实现 .pdf

上传人:C****o 文档编号:39722823 上传时间:2022-09-07 格式:PDF 页数:31 大小:512.38KB
返回 下载 相关 举报
2022年2022年简单Web服务器设计与实现 .pdf_第1页
第1页 / 共31页
2022年2022年简单Web服务器设计与实现 .pdf_第2页
第2页 / 共31页
点击查看更多>>
资源描述

《2022年2022年简单Web服务器设计与实现 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年简单Web服务器设计与实现 .pdf(31页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、简单 Web 服务器设计与实现摘要WWW 的工作基于客户机/服务器计算模型,由 Web 浏览器(客户机)和 Web 服务器(服务器)构成,两者之间采用超文本传送协议(HTTP)进行通信,HTTP 协议的作用原理包括四个步骤:连接,请求,应答,关闭应答。在课程设计中,系统开发平台为Win7,程序设计语言采用Java,程序运行平台为Eclipse。在程序设计中,采用了结构化与面向对象两种解决问题的方法。程序通过调试运行,初步实现了设计目标,并且经过适当完善后,将可以应用在商业中解决实际问题。关键词计算模型;Java;HTTP;Web服务器名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共

2、 31 页 -1 前言Internet是目前世界上最大的计算机互联网络,与大家的生活、学习、工作有着越来越密切的关系,它遍布全球,将世界各地各种规模的网络连接成一个整体,其用户群十分庞大,因此,建设一个好的Web站点对于一个机构的发展十分重要。近年来,随着网络用户要求的不断提高及计算机科学的迅速发展,特别是数据库技术在 Internet中的广泛应用,Web站点向用户提供的服务将越来越丰富,越来越人性化。本课程设计主要解决由Web 浏览器(客户机)和 Web服务器(服务器)构成,两者之间采用超文本传送协议(HTTP)进行通信的 Web服务器的程序设计。1.1 课程设计前准备以下的工作均是建立在大

3、量的调查基础上的,是Web服务器开发前期准备工作所解决的问题。(1)Java简介Java是由 sun公司开发的一种新型的面向对象的程序设计语言,主要用于web 页面的设计1。Java语言的流行除了因为它能够编制嵌入HTML 文件中的 Applet 外,还在于 Java语言本身的面向对象、简单、平台无关性、安全性、多线程等特点。Java语言的发展颇具传奇性,它与Internet 的 WWW 的迅猛发展是分不开的。由于其发展迅速,有人将它比喻为Internet上的世界语。前面讲到在Internet上 Web页面的设计采用的是 HTML 语言,用户借助于Web浏览器(如 Netscape,HotJa

4、va,IE 等),可以访问到远程 web 服务器上静态的、具有超链接的Web页面2。(2)HTTP 协议简介HTTP 协议是应用层的协议,定义了服务器端和客户端之间文件传输的沟通方式。HTTP 协议用于从 WWW 服务器传输超文本到本地浏览器的传送协议。由于HTTP 协议支持的服务不限于WWW,还可以是其它服务,它允许用户在统一的界面下,采用不同的协议访问不同的服务。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示等3。1.2 课程设计的内容名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 31 页

5、 -(1)熟悉 WWW 服务器和 WEB 服务器的工作原理;(2)熟悉套接字编程的相关知识;(3)完成一个简单的WEB 服务器的设计与实现,要求能够通过HTTP GET 命令获得一个简单的 HTML 文件;(4)运行该服务器,并编写一个简单的HTML 文件完成测试。1.3 课程设计要求(1)按要求编写课程设计报告书,能正确阐述设计结果。(2)通过课程设计培养学生严谨的科学态度,认真的工作作风和团队协作。(3)学会文献检索的基本方法和综合运用文献的能力。(4)在老师的指导下,要求每个学生独立完成课程设计的全部内容。1.4 课程设计平台Windows7 系统;Eclipse 软件平台2 Web 服

6、务器的工作原理名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 31 页 -2.1 HTTP 协议的作用原理WWW 是以 Internet 作为传输媒介的一个应用系统,WWW 网上最基本的传输单位是 Web 网页。WWW 的工作基于客户机/服务器计算模型,由Web 浏览器(客户机)和Web服务器(服务器)构成,两者之间采用超文本传送协议(HTTP)进行通信。HTTP 协议是基于 TCP/IP 协议之上的协议,是 Web浏览器和 Web 服务器之间的应用层协议,是通用的、无状态的、面向对象的协议。HTTP 协议的作用原理包括四个步骤:连接,请求,应答,关闭应答。wsHTTP 协议的作

7、用原理包括四个步骤:(1)连接:Web 浏览器与 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服务器接到后,进行事务处理,处理结果又通过HTTP 传回给

8、 Web 浏览器,从而在 Web 浏览器上显示出所请求的页面。例:假设客户机与 :8080/mydir/index.html 建立了连接,就会发送 GET命令:GET/mydir/index.html HTTP/1.0。主机名为http:/ 服务器从它的文档空间中搜索子目录mydir 的文件 index.html。如果找到该文件,Web服务器把该文件内容传送给相应的Web浏览器。为了告知Web 浏览器传送内容的类型,Web 服务器首先传送一些HTTP 头信息,然后传送具体内容(即 HTTP 体信息),HTTP 头信息和 HTTP 体信息之间用一个空行分开。(4)关闭连接:当应答结束后,Web

9、浏览器与Web 服务器必须断开,以保证其它Web浏览器能够与 Web服务器建立连接。2.2 Java开发语言相关知识与技术Java主要技术有:多线程,I/O 流操作,网络编程。2.2.1 java 中的多线程及实现:名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 31 页 -Java 是面向对象的程序语言,用Java 进行程序设计就是设计和使用类,Java 为我们提供了线程类 Thread来创建线程,创建线程与创建普通的类的对象的操作是一样的,而线程就是 Thread类或其子类的实例对象。下面是一个创建启动一个线程的语句:Thread thread1=new Thread();f

10、ile:/声明一个对象实例,即创建一个线程;Thread1.run();file:/用 Thread类中的 run()方法启动线程;从这个例子,我们可以通过Thread()构造方法创建一个线程,并启动该线程。事实上,启动线程,也就是启动线程的run()方法,而 Thread类中的 run()方法没有任何操作语句,所以这个线程没有任何操作。要使线程实现预定功能,必须定义自己的 run()方法。Java中通常有两种方式定义run()方法:通过定义一个 Thread类的子类,在该子类中重写run()方法。Thread子类的实例对象就是一个线程,显然,该线程有我们自己设计的线程体run()方法,启动线

11、程就启动了子类中重写的 run()方法。通过 Runnable 接口,在该接口中定义run()方法的接口。所谓接口跟类非常类似,主要用来实现特殊功能,如复杂关系的多重继承功能。线程被实际创建后处于待命状态,激活(启动)线程就是启动线程的run()方法,这是通过调用线程的start()方法来实现的。线程状态:1)New 当线程对象被创建时,处于该状态。2)Runnable:就绪状态,线程满足运行的所有条件但没有正在运行的线程位于该状态,有以下几种情况:a.处于 New 状态的线程执行start()。b.处于 Running 状态的线程失去 CPU。c.处于 Otherwise Block 状态的

12、线程阻塞解除。d.处于 Lock Block 状态的线程阻塞解除。3)Running:运行状态处于运行状态的线程可能发生以下几种情况:a.线程运行结束,进入Dead状态。b.CPU 被分配给其它线程,进入Runnable状态。c.满足 Otherwise Block 的条件,进入 Otherwise Block 状态。d.由于锁的原因无法执行,进入Lock Block 状态。名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 31 页 -e.由于等待的原因无法执行,进入Wait Block 状态。4)Dead:死亡状态线程运行结束,对于主线程main()结束,对于普通用户线程run(

13、)结束。5)Otherwise Block:阻塞状态,阻塞解除后进入Runnable状态a.调用 sleep(),阻塞解除条件为阻塞时间满。b.调用 join(),阻塞解除条件为调用join()的线程执行结束。注意:线程进入该状态不会释放锁。6)Lock Block:锁阻塞状态,阻塞解除后进入Runnable状态由于无法获得需要的锁而阻塞地线程进入该状态,阻塞解除条件为获得所需的锁。7)Wait Block:等待阻塞状态,阻塞解除后进入Lock Block 状态由于某个资源的原因必须进行等待,则进入该状态。阻塞解除条件为其它线程调用该资源的notify()或 notifyAll()。下面一个例

14、子实践了如何通过上述两种方法创建线程并启动它们:/通过 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:/程序的主

15、类 class Multi_Thread file:/声明主类;名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 31 页 -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()方法启动线程;运行该

16、程序就可以看出,线程 threadone和 threadtwo交替占用 CPU,处于并行运行状态。可以看出,启动线程的 run()方法是通过调用线程的start()方法来实现的(见上例中主类),调用 start()方法启动线程的run()方法不同于一般的调用方法,调用一般方法时,必须等到一般方法执行完毕才能够返回start()方法,而启动线程的run()方法后,start()告诉系统该线程准备就绪可以启动run()方法后,就返回start()方法执行调用start()方法语句下面的语句,这时run()方法可能还在运行,这样,线程的启动和运行并行进行,实现了多任务操作。2.2.2 IO 字节流操

17、作1)Java 中使用流的方式处理数据,基本的处理类为InputStream(字节读入流)和OutputStream(字节输出流)。2)可以使用各种过滤流对流数据进行过滤,实现各种附加功能。3)对字节流进行转换和包装可以获得字符流,字符流的基本处理流为Reader(字符读入流)和 Writer(字符输出流)。a.字节流:InputStream:int read()读入流中的一个字节并返回,数据存放在 int 的低 8 位中;int read(byte)读入流中的若干个字节,存放在byte 中,返回读入字节的数量;int read(byte,int,int)读入流中的若干个字节,存放在byte中

18、从第一个 int 参数开始(索引),最大长度为第二个int 参数的区间内。OutputStream:flush()将输出缓冲区中的信息写到真正的输出设备。调用方法:输出缓冲区满:自动调用;调用 close()时先调用 flush():自动调用;名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 31 页 -手动调用 flush()最常见的情况是产生异常时,虽然在 finally 中会对流执行 close(),但在异常条件下,close()能保证对流的关闭,但在调用flush()时会有漏洞。b.字符流:优点:操作文本数据时比较直观,读入和写出都以char为基本单位。缺点:底层依然以字节

19、流方式操作,所以在任何情况下都必须有转换的过程,效率相对较低。操作二进制数据时会存在编码问题,一般不使用字符流操作二进制数据。InputStreamReader:将字节读入流转为字符读入流。InputStreamReader(InputStream):使用默认字符集(取决的 JVM)将 InpustStream转为InputStreamReader。InputStreamReader(InputStream,String):使用 String 指定的字符集将 InputStream转为 InputStreamReader。OutputStreamWriter:将字符输出流转为字节输出流。Out

20、putStreamWriter(OutputStream):使 用 默 认 字 符 集(取 决 于JVM)将OutputStreamWriter转为 OutputStream。OutputStreamWriter(OutputStream,String):使 用String指 定 的 字 符 集 将OutputStreamWriter转为 OutputStream。BufferedReader:提供缓冲;readLine()。BufferedWriter:提供缓冲。PrintWriter:提供缓冲;print()、println()等方法。注意:在开发中,一般使用BufferedReader和

21、 PrintWriter 结合使用完成对字符流的过滤。2.2.3 网络架构:1)C/S 网络架构客户端/服务器架构,通常情况下,数据存储在服务器端,客户端和服务器端都有一个独立的应用程序,可以进行独立的操作,通过网络进行数据传输。常用的传输协议包括:TCP/IP:基于连接的协议优点:由于是有连接的传输,对于数据的准确性是有保证的。缺点:系统资源占用较多。UDP/IP:无连接的协议(数据报)名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 31 页 -优点:系统资源占用少。缺点:无法保证传输的准确性。用途:a.对于数据少量丢失可以接受的应用。b.存在足够数据冗余的应用。2)B/S 网

22、络架构浏览器/服务器架构,在服务器端完成几乎所有的功能(包括数据存储),客户端的浏览器只完成和服务器交互和显示服务器传输的信息的功能。常用的传输协议包括:http:超文本传输协议。https:支持多种加密操作的超文本传输协议。优点:客户端不需要安装任何附加软件,同时整个应用的升级也相对简单。IP:通过 IP Address和 Port(端口)定位具体的应用;Port 的有效范围是 065535,通常在开发应用时应避免使用1000 以下的端口,1000 以下有很多端口被常用应用占用。IP Address在 JDK5.0 中支持 4 位或 6 位两种方式,现在 4 位的占据主导地位,但将来会逐渐过

23、渡到 6 位 IP 地址的模式。TCP/IP 协议的实现:a.ServerSocket类:服务器端使用,用于监听客户端的请求。b.Socket类:服务器端和客户端使用,用于完成具体通信的所有功能。UDP/IP 协议的实现:a.DatagramSocket类:服务器端和客户端使用,用于实现通信的基本功能。b.DatagramPacket类:服务器端和客户端使用,用于封装通信的内容信息。3 开发环境及套字接编程3.1 Web服务器的开发环境该课程设计是基于Java编程语言的设计的 Web 服务器,开发环境是Eclipse 软件和Java Swing。(1)Eclipse 简介Eclipse 是一个

24、开放源代码的、基于Java 的可扩展开发平台。就其本身而言,它名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 31 页 -只是一个框架和一组服务,用于通过插件和组件构建开发环境。Eclipse 附带了一个标准的插件集,包括Java 开发工具。Eclipse 采用的技术是IBM 公司开发的(SWT),这是一种基于 Java的窗口组件,类似 Java本身提供的 AWT 和 Swing 窗口组件,Eclipse的插件机制是轻型软件组件化架构。在富客户机平台上,Eclipse 使用插件来提供所有的附加功能4。(2)Java Swing概述Swing 是不对等基于 GUI 工具箱的正式名字

25、,它是Java基础类库的一部分。完整的 JFC十分庞大,其中包含的内容远远大于Swing GUI 工具箱。JFC特性不仅仅包含了 Swing 组件,而且还包含了一个可访问的API、一个 2D API 和一个可拖拽的 API。Swing 拥有一个丰富、便捷的用户界面元素集合,对底层平台依赖的很少,因此与平台相关的 bug很少。Swing 给予不同平台的用户一致的感官效果5。3.2 Web服务器的套接字编程Java提供了一个ServerSocket类,程序员可以很方便地用它编写服务器程序。服务器套接字的基本功能类似于坐在电话机旁边等待呼叫到来。从技术上讲,ServerSocket运行在服务器上并监

26、听到来的TCP 连接。每个 ServerSocket都在服务器上的指定端口监听。当远程主机上的客户Socket试图与指定端口建立连接时,服务器被激活,判定客户程序与服务器的连接,并打开两个主机之间固有的 Socket。一旦与服务器套接字建立了连接,则服务器就可以使用固有的Socket对象向客户机发送数据。数据总是通过固有的套接字传递。3.2.1 ServerSocket类ServerSocket 类包含 了用Java 编写 服务 器程序的所有内 容。它包括创建新ServerSocket对象的构造器、在指定端口监听连接的方法,以及连接建立后可以发送和接收数据时返回Socket 对象的方法。此外,

27、它还有设置不同选项以及各种各样常用的方法,例如toString()方法。服务器的基本生命期是:1.利用 ServerSocket()构造器在指定端口创建一个新的ServerSocket;2.ServerSocket利用它的 accept()方法在指定端口监听到来的连接。accept()方法一直处于阻塞状态,直到有客户机试图建立连接。这时accept()方法返回连接客户机何服务器的 Socket;3.调用 getInputStream()方法、getOutputStream()方法或者两者都调用来得到与客户名师资料总结-精品资料欢迎下载-名师精心整理-第 10 页,共 31 页 -机通信的输入流

28、和输出流,具体调用哪一个方法还是两者都调用与具体服务器的类型有关;4.服务器和客户机根据双方都承认的协议进行交互,直到关闭连接时为止;5.服务器、客户机或两者均关闭连接;6.服务器返回步骤2,等待下一个连接到来。如果在 4 步花费的时间很长或时间无限期,则 wu-ftpd 这样的传统 Unix 服务器会创建一个新的进程来处理每个连接,从而使服务器在同一时刻可以为多个客户机提供服务。3.2.2 构造器一共有 3 个公共 ServerSocket构造器:public ServerSocket(int port)throws IOException,BindException public Serv

29、erSocket(int port,int queueLength)throws IOException,BindException public ServerSocket(int port,int queueLength,InetAddress bindaddress)throws IOException 这些构造器允许用户指定端口、用于保存到来的连接请求队列的长度以及绑定本地网络的接口。它们的基本功能完全相同,但其中有一些使用默认的队列长度值和默认的绑定地址。4 WEB 服务器的设计与实现4.1 Web服务器的程序设计流程根据上述 HTTP 协议的作用原理,实现GET 请求的 Web服务器

30、程序的方法如下:(1)创建 ServerSocket类对象,监听端口 8080。这是为了区别于 HTTP 的标准 TCP/IP端口 80而取的;(2)等待、接受客户机连接到端口8080,得到与客户机连接的socket;(3)创建与 socket字相关联的输入流instream和输出流 outstream;名师资料总结-精品资料欢迎下载-名师精心整理-第 11 页,共 31 页 -(4)从与 socket关联的输入流 instream中读取一行客户机提交的请求信息,请求信息的格式为:GET 路径/文件名 HTTP/1.0(5)从请求信息中获取请求类型。如果请求类型是GET,则从请求信息中获取所访

31、问的 HTML 文件名。没有 HTML 文件名时,则以index.html 作为文件名;(6)如果 HTML 文件存在,则打开HTML 文件,把 HTTP 头信息和 HTML 文件内容通过 socket传回给 Web浏览器,然后关闭文件。否则发送错误信息给Web浏览器;(7)关闭与相应 Web浏览器连接的 socket字。可以总结出 Web服务器的设计流程并作出其设计流程图,如图4-1 所示。图 4-1 Web服务器的程序设计流程4.2 用 Java 实现 Web 服务器的主要设计步骤及程序1.点击开始,打开eclipse 软件,在左框内建立Java 工程,在工程中分别建立相应的包和类,如图

32、3-2 所示。名师资料总结-精品资料欢迎下载-名师精心整理-第 12 页,共 31 页 -图 4-2 在工程中分别建立相应的包和类2.设计主函数程序在 Java工程中建立包 main 和类 WebServerMain,在对应框中输入以下程序:package com.web.main;import com.web.gui.WebServerFrame;public class WebServerMain/接口的实现public staticvoid main(String args)new WebServerFrame();3.设计 Web服务器的图形界面在 Java工程中建立包 gui 和类

33、WebServerFrame,在对应框中输入以下程序:package com.web.gui;import java.awt.*;import java.awt.event.*;import javax.swing.*;import .WebServerNet;public class WebServerFrame extends JFrame implements ActionListener private JMenuBar menuBar=new WebServerJMenuBar(this);/按钮面板Private JPanel btnPan=new JPanel(new FlowL

34、ayout(FlowLayout.CENTER);名师资料总结-精品资料欢迎下载-名师精心整理-第 13 页,共 31 页 -/将按钮面板选择布局管理器进行布局管理构建北部面板private JLabel listenPortLb=new JLabel(服务器监听端口:);/private JTextField portTf=new JTextField(1111,5);/宽度设置为 5private JButton controlBtn=new JButton(开始);/设置按钮名称private JButton clearHintBtn=new JButton(清空);/提示信息面板pri

35、vate JTextArea hintTa=new JTextArea();private WebServerNet net;public WebServerFrame()initComponent();net=new WebServerNet(this);/初始化所有界面组件private void initComponent()setJMenuBar(menuBar);buildBtnPan();buildHintPan();/建立按键setSize(400,300);/设置按键大小Toolkit tool=Toolkit.getDefaultToolkit();setLocation(t

36、ool.getScreenSize().width-this.getSize().width)/2,(tool.getScreenSize().height-this.getSize().height)/2);this.addWindowListener(new WindowAdapter()publicvoid windowClosing(WindowEvent arg0)WebServerFrame.this.setVisible(true);WebServerFrame.this.dispose(););/设置容器的大小setTitle(IIS Web 服务器 V01);/命名服务器的名

37、字setDefaultCloseOperation(EXIT_ON_CLOSE);名师资料总结-精品资料欢迎下载-名师精心整理-第 14 页,共 31 页 -setVisible(true);/构建按钮面板public void buildBtnPan()btnPan.add(listenPortLb);btnPan.add(portTf);btnPan.add(controlBtn);btnPan.add(clearHintBtn);/加入所有按键add(btnPan,BorderLayout.NORTH);/将按键放置在北部面板portTf.requestFocus();portTf.se

38、lectAll();controlBtn.addActionListener(this);clearHintBtn.addActionListener(this);/构建信息面板public void buildHintPan()hintTa.setEditable(false);JScrollPane scrollPane=new JScrollPane();scrollPane.setBorder(BorderFactory.createLoweredBevelBorder();scrollPane.getViewport().add(hintTa);add(scrollPane,Bord

39、erLayout.CENTER);/将构建内容面板放置在容器的中间hintTa.setText(请按“开始”按钮来开启 Web 服务器。);/各个出现的问题监测public void actionPerformed(ActionEvent arg0)Object source=arg0.getSource();/判断按钮提示文字内容if(source=clearHintBtn)hintTa.setText();return;名师资料总结-精品资料欢迎下载-名师精心整理-第 15 页,共 31 页 -String msg=controlBtn.getText();if(msg.equals(开始

40、)controlBtn.setText(停止);portTf.setEditable(false);net.start(portTf.getText();else controlBtn.setText(开始);portTf.setEditable(true);net.stop();public void addHint(String s)hintTa.setText(hintTa.getText()+rn+s);5 测试运行5.1 调试运行为了确保上述程序的正确性,进行调试运行,在工程中建立Folder,并在其内建立html 文件,如图 5-1 所示。名师资料总结-精品资料欢迎下载-名师精心整

41、理-第 16 页,共 31 页 -图 5-1 添加 html 文件在 index.html 文件中输入“大家好,我是来自通信0702班的丁弟。我的课程设计是简单的 WEB 服务器的设计与实现,我所用的语言是 JAVA。谢谢大家。”如下图 5-2所示。图 5-2 在 index.html 文件中输入如图字样接着点击 Web服务器中的“开始”,开启 Web服务器结果显示为如图5-3 所示。名师资料总结-精品资料欢迎下载-名师精心整理-第 17 页,共 31 页 -图 5-3 点击 Web服务器中的“开始”然后打开浏览器,输入网址http:/10.28.23.165:1111/index.html,

42、即 Web 服务器把该文件内容传送给了相应的Web浏览器。刷新得到如图5-4 所示:图 5-4 把文件内容传送给相应的Web浏览器服务器窗口显示内容如图5-5 所示:名师资料总结-精品资料欢迎下载-名师精心整理-第 18 页,共 31 页 -5-5 运行服务器访问结果名师资料总结-精品资料欢迎下载-名师精心整理-第 19 页,共 31 页 -6 结束语随着网络在人们日常生活中的应用越来越广泛和嵌入式技术在日常生活中的地位日愈凸显。这对我们这些有关网络专业的学生既是一种挑战,也是一个机遇。通过这次课程设计让我初步了解了Web服务器的设计和工作原理,掌握了一些 JAVA 语言和学会使用 Eclip

43、se 编程软件,对我的网络编程有了很大的提高。与此同时我还学到了一些专业知识之外的东西。课程设计的过程中,我了解到课程设计不光光是埋头做设计,也是同学之间互相学习,互相交流经验的机会;也是大家向老师提出疑问和解答疑问的机会。我觉得课程设计是一个复习课堂上学到知识的机会,也是一个加强学生动手设计能力的机会。设计起初我遇到了一些问题,后来我通过上网,查阅书籍和请教老师,对一些问题有了初步了解。当然在老师和同学的热心帮助下,我慢慢解开了课程设计中遇到的一些问题,慢慢揭开这门设计的神秘面纱,最终完成了我的课程设计。这次课程设计不仅考察了我们对课堂学的专业知识的理解程度,也锻炼了我们的动手能力,提高了我

44、们独立思考问题,解决问题的能力。总体上看,我觉得这次课程设计使我自身的知识丰富了不少,但是同时也发现了自己在动手和专业知识方面存在的一些问题,例如知识不能融合,不能与实践相结合,软件操作不够熟练,不能灵活运用。使我了解要先学好理论知识才能很好的与实践相结合,才能熟练的运用到生活中。名师资料总结-精品资料欢迎下载-名师精心整理-第 20 页,共 31 页 -参考文献1 Harvey M.Deitel 等著邱仲潘等译.Java Web服务高级教程.第一版.机械工业出版社,2003.7 2 孙卫琴.Java网络编程精解.北京:电子工业出版社,2007.33 刘贺湘 Internet实用技术教程北京:

45、清华大学出版社,1998 4 吴凤祥.用 Java实现一个 Socket通信模型.现代电子技术,2001.7.20,15 5 耿祥义、张跃平.Java2实用教程(第三版).清华大学出版社.2006 附录 1:基于 Java 的简单 Web服务器的程序设计与实现名师资料总结-精品资料欢迎下载-名师精心整理-第 21 页,共 31 页 -/程序名称:WebServer.java/程序功能:简单Web服务器设计与实现/程序作者:丁弟/最后修改日期:2010-06-30 程序1:实现主函数程序package com.web.main;import com.web.gui.WebServerFrame;

46、public class WebServerMain/接口的实现public staticvoid main(String args)new WebServerFrame();程序 2:实现 Web服务器的图形界面package com.web.gui;import java.awt.*;import java.awt.event.*;import javax.swing.*;import net.WebServerNet;public class WebServerFrame extends JFrame implements ActionListener private JMenuBar

47、menuBar=new WebServerJMenuBar(this);/按钮面板Private JPanel btnPan=new JPanel(new FlowLayout(FlowLayout.CENTER);/将按钮面板选择布局管理器进行布局管理构建北部面板private JLabel listenPortLb=new JLabel(服务器监听端口:);/private JTextField portTf=new JTextField(1111,5);/宽度设置为 5private JButton controlBtn=new JButton(开始);/设置按钮名称private JB

48、utton clearHintBtn=new JButton(清空);名师资料总结-精品资料欢迎下载-名师精心整理-第 22 页,共 31 页 -/提示信息面板private JTextArea hintTa=new JTextArea();private WebServerNet net;public WebServerFrame()initComponent();net=new WebServerNet(this);/初始化所有界面组件private void initComponent()setJMenuBar(menuBar);buildBtnPan();buildHintPan();

49、/建立按键setSize(400,300);/设置按键大小Toolkit tool=Toolkit.getDefaultToolkit();setLocation(tool.getScreenSize().width-this.getSize().width)/2,(tool.getScreenSize().height-this.getSize().height)/2);this.addWindowListener(new WindowAdapter()publicvoid windowClosing(WindowEvent arg0)WebServerFrame.this.setVisib

50、le(true);WebServerFrame.this.dispose(););/设置容器的大小setTitle(IIS Web 服务器 V01);/命名服务器的名字setDefaultCloseOperation(EXIT_ON_CLOSE);setVisible(true);/构建按钮面板public void buildBtnPan()btnPan.add(listenPortLb);名师资料总结-精品资料欢迎下载-名师精心整理-第 23 页,共 31 页 -btnPan.add(portTf);btnPan.add(controlBtn);btnPan.add(clearHintBt

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁