基于Java的简单web服务器设计与实现

基于Java的简单web服务器设计与实现 一,摘要 Web 服务器一般指网站服务器,是指驻留于上某种类型计算机的程序,可以处理浏览器等 Web 客户端的请求并返回相应响应

本文包含相关资料包-----> 点击直达获取<-------

基于Java的简单web服务器设计与实现

一、摘要

Web 服务器一般指网站服务器,是指驻留于上某种类型计算机的程序,可以处理浏览器等 Web 客户端的请求并返回相应响应,也可以放置网站文件。由 Web 浏览器(客户机)和 Web 服务器(服务器)构成,两者之间采用超文本传送协议(HTTP) 进行通信,HTTP 协议的作用原理包括四个步骤:连接,请求,应答,关闭应答。本次课程设计中,系统开发平台为 Win10,程序设计语言采用 Java,程序运行平台为 Eclipse,采用了结构化和面向对象两种解决问题的方法。本文简要介绍了 HTTP 协议的基本概念,特点,以及协议方式,并给出一个构建简单 Web 服务器的实例过程。

关键词 :Web 服务器 HTTP Java

二、概述

2.1 程序设计语言 Java 简介

本次程序设计语言我采用了 Java,程序运行平台为 Eclipse。Java 是由 sun 公司开发的一种新型的面向对象的程序设计语言,主要用于 Web 页面的设计。Java 语言的流行除了因为它能够编制嵌入 HTML 文件中的 Applet 外, 还在于 Java 语言本身的面向对象、简单、台无关性、安全性、多线程等特点。Java 设计成支持在网络上应用,它是分布式语言。Java 既支持各种层次的网络连接,又以 Socket 类支持可靠的流()网络连接,所以用户可以产生分布式的客户机和服务器。网络变成软件应用的分布运载工具。Java 程序只要编写一次,就可到处运行。[1]

2.2 HTTP 协议简介

客户机与服务器之间采用超文本传送协议(HTTP)进行通信,HTTP 协议是应用层的协议,定义了服务器端和客户端之间文件传输的沟通方式。HTTP 协议用于从 WWW 服务器传输超文本到本地浏览器的传送协议。由于 HTTP 协议支持的服务不限于 WWW,还可以是其它服务,它允许用户在统一的界面下,采用不同的协议访问不同的服务。它可以使浏览器更加高效,使网络传输减少。不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示等。[2]

2.3 课程设计目的

本次课程设计需要熟悉 Web 服务器的工作原理,并了解套接字编程的相关知识,完成一个简单的 Web 服务器的设计与实现,通过请求命令获得一个简单的 HTML 文件,并完成测试。

三、设计的基本概念和原理

3.1 Web 服务器的基本概念

Web 服务器可以解析 HTTP 协议。当 Web 服务器接收到一个 HTTP 请求,会返回一个 HTTP 响应,例如送回一个 HTML 页面。为了处理一个请求,Web 服务器可以响应一个静态页面或图片,进行页面跳转,或者把动态响应的产生委托给一些其它的程序例如 CGI 脚本,JSP 脚本,servlets,ASP 脚本,服务器端 JavaScript,或者一些其它的服务器端技术。无论它们的目的如何,这些服务器端的程序通常产生一个 HTML 的响应来让浏览器可以浏览。

3.2 HTTP 协议的作用原理

WWW 的工作基于客户机/服务器计算模型,由 Web 浏览器(客户机)Web 服务器(服务器)构成,两者之间采用超文本传送协议(HTTP) 进行通信。HTTP 协议是基于 TCP/IP 协议之上的协议,是 Web 浏览器和 Web 服务器之间的应用层协议,是通用的、无状态的、面向对象的协议。HTTP 协议的作用原理包括四个步骤:连接,请求,应答,关闭应答。[3]

  • 连接 :Web 浏览器与 Web 服务器建立连接,打开一个称为 socket(套接字)的虚拟文件,此文件的建立标志着连接建立成功

  • 请求 :Web 浏览器通过 socket 向 Web 服务器提交请求。HTTP 的请求一般是 GET 或 POST 命令(POST 用于 FORM 参数的传递)。GET 命令的格式为:GET 路径/文件名 HTTP/1.0 文件名指出所访问的文件,HTTP/1.0 指出 Web 浏览器使用的 HTTP 版本

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

  • 关闭连接 : 当应答结束后, Web 浏览器与 Web 服务器必须断开, 以保证其它 Web 浏览器能够与 Web 服务器建立连接

四、总体设计

4.1 套接字编程

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

服务器的基本生命期是

  • 利用 ServerSocket()构造器在指定端口创建一个新的 ServerSocket

  • ServerSocket 利用它的 accept()方法在指定端口监听到来的连接。accept()方法一直处于阻塞状态, 直到有客户机试图建立连接。 这时 accept()方法返回连接客户机何服务器的 Socket

  • 调用 getInputStream()方法、 getOutputStream()方法或者两者都调用来得到与客户机通信的输入流和输出流, 具体调用哪一个方法还是两者都调用与具体服务器的类型有关

  • 服务器和客户机根据双方都承认的协议进行交互, 直到关闭连接时为止

  • 服务器、 客户机或两者均关闭连接

  • 服务器返回步骤 2, 等待下一个连接到来。 如果在 4 步花费的时间很长或时间无限期, 则 wu-ftpd 这样的传统 Unix 服务器会创建一个新的进程来处理每个连接, 从而使服务器在同一时刻可以为多个客户机提供服务

4.2 构造器设计

一共有 3 个公共 ServerSocket 构造器:

c++ public ServerSocket(int port) throws IOException, BindException public ServerSocket(int port, int queueLength) throws IOException, BindException public ServerSocket(int port, int queueLength, InetAddress bindaddress) throws IOException

这些构造器允许用户指定端口、 用于保存到来的连接请求队列的长度以及绑定本地网络的接口。 它们的基本功能完全相同, 但其中有一些使用默认的队列长度值和默认的绑定地址。

五、详细设计

5.1 Web 服务器的程序设计流程

根据上述 HTTP 协议的作用原理, 实现 GET 请求的 Web 服务器程序的方法如下:

  • 创建 ServerSocket 类对象, 监听端口 8080。这是为了区别于 HTTP 的标准 TCP/IP 端口 80 而取的

  • 等待、 接受客户机连接到端口 8080, 得到与客户机连接的 socket

  • 创建与 socket 字相关联的输入流 instream 和输出流 outstream

  • 从与 socket 关联的输入流 instream 中读取一行客户机提交的请求信息, 请求信息的格式为: GET 路径/文件名 HTTP/1.0

  • 从请求信息中获取请求类型。 如果请求类型是 GET, 则从请求信息中获取所访问的 HTML 文件名。 没有 HTML 文件名时, 则以 index.html 作为文件名

  • 如果 HTML 文件存在, 则打开 HTML 文件, 把 HTTP 头信息和 HTML 文件内容通过 socket 传回给 Web 浏览器, 然后关闭文件。 否则发送错误信息给 Web 浏览器

  • 关闭与相应 Web 浏览器连接的 socket 字

5.2 Java 实现 Web 服务器主要部分

包和类设计结构

程序设计流程图

六、系统测试结果

七、简要的使用说明

在工程中建立 HTML 文件夹,并在其中建立 HTML 文件,在 HTML 文件中输入“测试”。然后运行程序,点击开始按钮,然后打开浏览器,在浏览器搜索栏输入 http://localhost:1985/index.html ,即 Web 服务器把该文件内容传送给了相应的 Web 浏览器。

八、总结

此次课程设计完成了一个简单的 Web 服务器,程序有简单明了的运行界面,能够实现 Web 服务。通过此次课程设计让我初步了解了 Web 服务器的设计和工作原理,掌握了一些 Java 语言的技巧,深入理解了 HTTP 传输协议的相关内容,进一步了解了 Web 服务器和客户端的交互情况。

这次课程设计不仅考察了我们对课堂学的专业知识的理解程度, 也锻炼了我们的动手能力,提高了我们独立思考问题,解决问题的能力。总体上看,我觉得这次课程设计使我自身的知识丰富了不少, 但是同时也发现了自己在动手和专业知识方面存在的一些问题,例如知识不能融合,不能与实践相结合,软件操作不够熟练,不能灵活运用。 使我了解要先学好理论知识才能很好的与实践相结合,才能熟练的运用到生活中。同时,这次课程设计也为我以后的学习指明了方向。

九、参考文献

[1] 孙卫琴. 《Java 网络编程精解 》 . 北京: 电子工业出版社, 2007.3.

[2] 刘贺湘. 《Internet 实用技术教程》. 北京: 清华大学出版社, 1998.

[3] 谢希仁. 《计算机网络》. 北京: 电子工业出版社, 2017.1

[4] 吴凤祥.《用 Java 实现一个 Socket 通信模型》 . 《现代电子技术》, 2001.7.20.

参考文献

  • 基于J2EE的WEB开发框架的研究与应用(汕头大学·李浩)
  • 基于J2EE的学生网上考试系统的设计与实现(华南理工大学·李占新)
  • 基于J2EE的学生网上考试系统的设计与实现(华南理工大学·李占新)
  • 基于J2EE框架的WSBCC系统EJB应用(天津大学·王东燕)
  • 基于EJB的J2EE实现技术研究(南京航空航天大学·夏君权)
  • 基于.NET下Web服务的信息查询系统的研究与设计(合肥工业大学·张静)
  • 基于.NET下Web服务的信息查询系统的研究与设计(合肥工业大学·张静)
  • 基于J2EE平台标准的WEB应用开发(福州大学·苏晓玲)
  • 基于J2EE平台标准的WEB应用开发(福州大学·苏晓玲)
  • 基于Java的Web应用设计与开发(西南石油学院·龚华)
  • 基于J2EE的Web数据库应用技术(南京理工大学·考持坤)
  • 用J2EE构造网站技术的研究(内蒙古大学·马晓波)
  • 基于J2EE的学生网上考试系统的设计与实现(华南理工大学·李占新)
  • 基于J2EE的WEB开发框架的研究与应用(汕头大学·李浩)
  • 基于.NET的Web Service技术应用(华中师范大学·赵生翼)

本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:代码项目助手 ,原文地址:https://bishedaima.com/yuanma/35408.html

相关推荐

发表回复

登录后才能评论