基于Java实现的Web服务器与测试工具开发

article/2025/10/22 6:54:36

资源下载地址:https://download.csdn.net/download/sheziqiong/85706486
资源下载地址:https://download.csdn.net/download/sheziqiong/85706486

Web 服务器与测试工具开发

一、系统概述

1.1 系统背景

基于 Java 编程语言,利用 http socket 通信技术,写一个小型的 Web 服务器与一个爬虫的测试工具,来对比分析所写的服务器获取到的页面源码与从 Tomcat 获取的相似度。

1.2 系统目标

序号目标内容
1客户端可以通过 GET 和 POST 获取信息
2支持 HTML、servlet、JSP 页面的访问
3支持标准的 filter 行为
4服务器与一个客户端能维持一个会话
5客户端支持带参数的 POST 获取
6客户端能够比较获取到的网页结果

1.3 开发环境与工具

序号类别具体需求备注
1硬件Windows 10
2软件eclipse

二、需求分析

2.1 系统需求概述

小型 Web 服务器:

支持客户端的网页请求,进行并发处理,缩短请求的响应时间。

可响应 GET、POST(HTML、servlet、JSP)页面的请求。

对每次网页请求都进行过滤(filter)。

支持 request、response 的跳转请求。

可维持一个客户端与服务器间的会话(session)。

客户端模拟器:

通过输入端口连接 Web 服务器,完成交互。

支持 get 方法的页面请求。

支持 post 方法,可以对参数进行封装。

构建测试用例:

手工将“Java Web 服务器开发”中的示例部署到 Tomcat 中,执行程序,抓取各个页面的输出,保存成“标准结果”,每个页面一个结果文件。

手工将“Java Web 服务器开发”中的示例部署到自己开发的 Web 服务器中。采用本程序模拟上述访问过程,将“模拟结果”进行保存。

通过“实习 3 中”的文件相似性的方法对于“模拟结果”和“标准结果进行比较”,显示输出的结果。

2.2 功能性需求

可以使用 GET 方法请求网页并得到正确的返回结果

可以使用 POST 方法请求网页并得到正确的返回结果

能够比较 Tomcat 和自己开发的服务器的返回结果的相似度

2.3 非功能性需求

服务器对读取的 WebContent(原老师给的是一个动态网页项目文件夹下的子目录)上升为一个动态网页项目,也就可以读取与 MyWebServer1.0 同级目录下的不同动态网页项目,且获取的 url 格式与 Tomcat 一样,MyWebContent1.0 是一个动态网页项目,all.html 是该项目里面的一个需要获取的页面。

例:http://localhost:8888/MyWebContent1.0/all.html

三、概要设计

3.1 系统总体设计

Web 服务器

总体上可以把 Web 服务器的代码分装成三个包:

Server 包封装服务器的主体流程:(VritualMachine)建立 socket 连接、(ProcessOne)过滤网、(ProcessTwo)发送(转译后)网页文件;

DataPool 包封装所有数据池,来降低类的耦合性,用 synchronized 来保证存取的数据安全:包括 ServletPool、JspPool、SessionPool、FilterPool;

Parameter 包封装了扩展 servlet-api.jar 的接口的所有类:

AFilterChain (implements FilterChain)、

Response(implements HttpServletResponse)、

Request(implements HttpServlet Request)、

Dispatcher(implements RequestDispatcher)、

Session(implements HttpSession);

测试工具

GET 方法,通过 socket 连接之后发送请求,然后接收网页返回的 Response,再去掉 GET 方法返回的头部,然后返回。

POST 方法,POST 通过模拟人登录浏览器获取信息来实现。有两种情况,如果页面中有 servlet 会先获取页面中的 servlet,然后设置 POST 的 header 和 method,并且设置成不马上转发和重定向,紧接着,如果调用函数时没有给表单的参数,则 POST 之后直接获取浏览器的返回结果,如果给了表单的参数,就会发送 POST 之后获取返回的重定向页面,然后设置对应的 GET 头,此时需要设置 JSESSIONID 以保证是同一个用户访问的页面,然后再获取浏览器的返回结果。

3.2 系统功能设计

Web 服务器

HTML:收到 socket 连接时,创一个线程读取 socket 输入流的报文头与体并创建 req 与 resp 对象,找到过滤链并执行过滤操作,最后写入报文头到 socket 输出流,并读取 HTML 文件作为报文体

Servlet:收到 socket 连接时,创一个线程读取 socket 输入流的报文头与体并创建 req 与 resp 对象,找到过滤链并执行过滤操作,到 ServletPool 找 servlet 对象,新生成一个调用服务器请求的方法,生成对应 HTML 文件,最后写入报文头到 socket 输出流,并读取 HTML 文件作为报文体

JSP:收到 socket 连接时,创一个线程读取 socket 输入流的报文头与体并创建 req 与 resp 对象,找到过滤链并执行过滤操作,从 JspPool 获取转译成 servlet 的对象,调用该对象的 GET/POST 方法,生成对应 HTML 文件,最后写入报文头到 socket 输出流,并读取 HTML 文件作为报文体

AFilterChain:FilterPool 里面包含每个项目的所有 Filter 对象,根据 req 的 url 可以找到匹配的 Filter 链。

Session:创建 req 对象的时候会为它设置一个 session,在最后写报文头的时候如果 req 的 header 没有“Cookie”,就在报文头里写上 Set-Cookie:sessionId。

页面跳转:req 的 getRequestDispatcher 会重新进入一个 ProcessTwo(其功能如下图所示);resp 的 sendRedirect(xxx)会直接在 socket 输出流设置状态 302,并设置 Location:xxx,然后使服务器发送新请求。

(图一)总体直观图

测试工具

客户端有两个属性,port 和 JSessionID,port 用于每次断开后的连接,因为获取完之后关闭 IO 流时会断开连接。JSessionID 初始化为 null,一旦收到了服务器给的 Cookie 就会设置 SessionID 来保证后续访问的时候是同一个用户。

sendGet:sendGet 会调用 setGetHeader 函数来设置 GET 头,然后发送,获取网页的 Response 后去掉头部的信息并返回收到的结果。

sendPost:sendPost 会调用 sendGet 来获取页面然后通过 getServletName 来获取 Servlet,并且如果带有参数,会调用 getProjectName 来获取项目名然后用来转发和重定向到别的页面,如果参数出错,就会获取一个转发后但是结果错误的网页。

WebClient 中的 connect 函数是用来测试该端口是否能够连接的。

CompareUtil 中的 compare 函数有两个参数,是要比较的两个文件所在的文件路径,然后返回一个 double 类型的值作为相似度。

FileUtil 用来写入文件。

WebUtil 用来根据所给的正则表达式然后获取页面中的标签。

四、详细设计

4.1 模块接口设计

Web 服务器

总类图

过滤链

如何只调用 AFilterChain 的 doFilter(req,resp)函数,就能实现全过滤 + 发送终版 HTML,需要 AfilterChain(差不多是一个链表),它里面包含一个 Filter 对象,并有一个 next 引用下一个 AfilterChain 对象。

public class AFilterChain implements FilterChain {private Filter cur;public AFilterChain next;public void doFilter(ServletRequest req, ServletResponse resp) {if(cur == null) {ProcessTwo p = new ProcessTwo(req,resp);handle();}else {if(next == null) {Filter t = cur;cur = null;next = null;doFilter(req, resp, this);}else {Filter t = cur;cur = next.cur;next = next.next;doFilter(req, resp, this);}}}
}
servlet

Servlet 执行后获得的 HTML 页面放入本工程的 html/pro/xxx 里面,然后通过当时建立连接的 socket 的输出流发送报文头 +html/pro/xxx 里面的东西。

jsp

JSP 都会被转成 servlet 类,这个类的.java 代码会被装入 jsp_servlet/pro/xxx 里面,调用这个转译的 servlet 形成的 HTML 页面也会装入与上面一样的文件里面。

测试工具

WebClient 提供了两个接口,sendGet 和 sendPost,两个接口用于发送 GET 请求和 POST 请求,sendPost 的第二个参数 Map 可以为 null,此时就不会有提交表单这个操作。返回值都为 String,也就是网页 Response 的结果。

CompareUtil 中提供了一个 compare 方法,可以比较两个文件(不是文件夹)的相似度,返回值为 Double。

FileUtil 中提供了 write 文件的方法,用于写入文件。

WebUtil 中提供了 getTag 的方法,用来找到 Web 页面中的各种标签,并返回一个 String,如果没找到就返回 null。

五、系统成果展示

5.1 模块 1 Web 服务器

得到过滤链的测试

JSP 转 servlet

测试输出

5.2 模块 2 测试工具

通过 GET 获取并保存到 txt 文件中的结果 测试用例不丰富,不能说明问题

更多的结果在 results 中,下面的是使用测试工具比较的结果,文件名的前缀是请求方式,后面带&是请求时的参数键值对


资源下载地址:https://download.csdn.net/download/sheziqiong/85706486
资源下载地址:https://download.csdn.net/download/sheziqiong/85706486


http://chatgpt.dhexx.cn/article/k2gPAxO1.shtml

相关文章

Web开发与服务器管理 (一)

(在W3schools 上练习PHP code) topic1---PHP介绍(变量、数据类型、操作、控制语句) 1. 介绍PHP PHP以前是Personal Home Page的简称,现在的官方名称是PHP: Hypertext Preprocessor,意思为“PHP&#xff…

开发静态web服务器

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 开发静态web服务器 一、返回固定页面的web服务器二、返回指定页面的web服务器三、返回404页面四、多任务版五、面向对象版五、命令行启动动态绑定端口号 一、返回固定页面的w…

Web服务器开发(一)基于阿里云ECS服务器WEB服务器环境的搭建

本章主要讲解如何购买和配置阿里云ECS服务器以及搭建网络站点。一 阿里云ECS服务器 (一)购买阿里云服务器(只要实名认证24岁下,可以直接购买学生机) 1 注册阿里云,这步就不细说了。 2 配置ECS服务器 &…

在Eclipse中配置Web服务器,并开发部署一个简单的web应用

1、单击Eclipse下方面板的“Server”面板,在该面板的空白处单击鼠标右键,在弹出的快捷菜单中选择“New→Server”菜单项 2、弹出如下对话框,选择“Apache→Tomcat v7.0 Server”节点 3、Next,出现如下对话框,填写Tomca…

如何搭建web服务器

现在很多网页的编写的时候都要求做成响应式的,而相应的就需要我们实时的进行调试。而如何更方便的利用各种设备查看我们更新的页面内容呢?接下来,我们就来学习一下关于web服务器的搭建(这样只要在同一个局域网内,只要输…

web服务器的开发(简易版本)

文章目录 总体介绍使用的知识总结:http协议请求报文格式:http协议响应消息格式:使用epoll模型作为web服务器: 总体介绍 使用浏览器作为客户端访问web服务器; 使用的知识总结: socktet编程: socket -> setsock…

C++ web server服务器 开发

本文是牛客网Linux 高并发服务器开发视频教程的笔记 1、预备知识 1.1 Linux与远程 使用ssh在widows中控制Linux系统,使用vscode控制代码 使用g编译 1.1 静态库与动态库 静态库与动态库的制作、区别 1.2 makefile makefile文件操作就是指定所有源文件的编译顺序…

Web 服务器的搭建

1.下载Nginx源码: wget http://nginx.org/download/nginx-1.19.4.tar.gz2.解压Nginx源码: tar -zxvf nginx-1.19.4.tar.gz 3.安装相关依赖 sudo apt-get install openssl libssl-dev libpcre3 libpcre3-dev zlib1g-dev –y4. 进入到nginx-1.19.4目录…

Tomcat服务器和Web开发介绍

Tomcat服务器和Web开发介绍 一、开启Web开发 什么是web开发 WEB,即网页的意思,它用于表示Internet主机上供外界访问的资源。 Internet上供外界访问的Web资源分为: 静态web资源(如html 页面):指web页面中供…

C#开发自己的Web服务器

下载源代码 介绍 我们将学习如何写一个简单的web服务器,用于响应知名的HTTP请求(GET和POST),用C#发送响应。然后,我们从网络访问这台服务器,这次我们会说“Hello world!” 背景 HTTP协议 HTTP是服务器和客户机之间的通…

Web开发介绍

Web开发介绍 1 什么是web开发 Web:全球广域网,也称为万维网(www World Wide Web),能够通过浏览器访问的网站。 所以Web开发说白了,就是开发网站的,例如下图所示的网站:淘宝,京东等等 那么我们…

搭建web服务器

1.要求搭建web服务器,能够访问到网页内容为“小胖,你咋这么胖呢!” 2.要求搭建web服务器,创建基于域名的虚拟主机,能够使用www.xiaopang.com和www.dapang.com访问各自的网站网站存放路径分别为/xiaopang和/dapang,内容…

Web开发及服务器

转载自https://www.cnblogs.com/xdp-gacl/p/3729033.html。 一、基本概念 1.1、WEB开发的相关知识 WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源。 Internet上供外界访问的Web资源分为: 静态web资源&#x…

EI数据库免费检索入口

转载自:http://www.ei-istp.com/New_691.html 具体查询方式,详看链接。

数据库搜索与索引

索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。如果想按特定职员的姓来查找他或她,则与在表中搜索所有的行相比,索引有助于更快地获取信息。 索引的一个主要目的就是加快检索表中数据&#x…

数据库 索引

多数数据库,使用 B 树(Balance Tree)的结构来保存索引。 B 树, 最上层节点:根节点 最下层节点:叶子节点 两者之间的节点:中间节点 B 树,显著特征:从根节点,到…

mysql全库搜索关键字_数据库 全文检索

一、概述 MySQL全文检索是利用查询关键字和查询列内容之间的相关度进行检索,可以利用全文索引来提高匹配的速度。 二、语法 MATCH (col1,col2,...) AGAINST (expr [search_modifier]) search_modifier: { IN BOOLEAN MODE | WITH QUERY EXPANSION } 例如:SELECT * FROM tab_n…

人文社科类文献去哪些数据库检索下载

查找下载人文社科类文献的数据库大盘点: 1、文献党下载器(wxdown.org) 大型文献馆,几乎整合汇集了所有中外文献数据库资源,可附带权限进入文献数据库查找下载文献,覆盖全科包括查找下载人文社科类文献的众…

数据库索引的实现原理

强烈建议参阅链接:http://www.linezing.com/blog/?p=798#nav-1 说白了,索引问题就是一个查找问题。。。 数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。索引的实现通常使用B树及其变种B+树。 在数据之外,数据库系统还维护着满足…

WoS数据库使用及检索示例

目录 快速了解一个领域的情况 1. 核心合集检索和所有数据库检索的区别 2. 检索结果分析 2.1 排序方式(日期,被引频次) 2.2 分析检索结果 2.3 精炼检索结果(二次检索) 2.4 创建引文报告 2.5 具体某一篇文献 快…