`
liuyanttkl
  • 浏览: 19735 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

小型WEB服务器程序解析1

阅读更多
设计分析:简易WebServer由三个类组成,HttpServer,Request,Response

启动主类是HttpServer class.它创建一个HttpServer实例来调用它的await()方法,启动类是一个线程类,继承Tread,这个方法在一个指定的端口接受进入的HTTP请求,处理请求后 发送Response到客户端,await()一直在等待状态,知道它接受一个退出的命令。这个程序只能从指定的目录发送静态的内容给客户端,简单文件 比如 html image txt文件,且不支持headers参数处理(像dates,cookies)。


分析类HttpServer:它是一个WEB服务器,它为客户端提供public static void finalWEB_ROOT指定下的静态资源,WEB_ROOT的初始化,public static void finalWEB_ROOT=System.getProperty("user.dir") + File.separator  + "webroot";

HttpServer写成一个线程 继承Thread,设定一个停止命令 和端口,在run()里面定义InputStream OutputStream ,生成Request对象,调用Request里面的ParseContent(),解析Request上来的字符串,然后生成应答对象,传入输出流(ous)和Request(客户端的请求路径)。


分析类Request:与客户端连结的socket得到的InputStream对象创建,通过对这个InputStream对象的read调用可以得到客户端请求的原始数据,定义两个方法Parse()和parseUrl()来解析Request的原始数据,构造方法中传入这个input.定义私有的变量,private InoutSteam input,private String url,Request 类中的三个方法,一个是public void Parse()(解析请求的的内容) public string parseUrl(String queryString).


在Parse()方法中定义一个StringBuffer sb=new StringBuffer();

程序实现如下:

StringBuffer sb=new StringBuffer();

Int chh= -1;

While((chh=input.Read())!=-1){

request.Append((char)chh);

If(request.toString.endWith("\r\n"))

{

Break;

}

}

接下来将得到的字符串进行转码 以免出现乱码:

String requeStr=request.toString();

// 对读取到的数据进行重新编码 以免出现乱码

requeStr = java.net.URLDecoder.decode(requeStr, "GBK");

Url=praseURL(requeStr);

System.out.println(requeStr);


接下来把独到的数据装载到一个数组中间 然后打印出来,那么接下来定义一个数组

Byte[] recivedData=new byte[input.available()];

读取出来

Input.read(recivedData);

String result=new String(recivedData);

System.out.println(result);

接下来来解析URL:

/**

  * 从请求的内容中解析出路径

  * 

  * @param requestString

  */

 private String parseURL(String requestString) {

  int index1, index2;

  index1 = requestString.indexOf(' ');

  if (index1 != -1) {

   index2 = requestString.indexOf(' ', index1 + 1);

   if (index2 > index1)

    return requestString.substring(index1 + 1, index2);

  }

  return null;

 }

还有一个方法是GET到一个URL,返回一个url那么可以这样来定义:

Public String getUrl(){

Return url;



分析类response:它是一个应答对象,通过一个OutputStream 参数组成。

私有化两个变量 一个是是客户端的请求参数 一个是一个输出流。这样来定义,

Private Request request;

Private OutputStream output;

 private static final int BUFFER_SIZE = 1024;

在构造器中传入这两个参数:

Public void Response(String request,Stringoutput){

This.request=rquest;

This.output=output;

}

接下来分析这个类中的几个方法 为什么是这几个方法:

首先有一个可以给客户端发送静态资源的方法:public void sendStaticResource();

把客户端请求的文件名和目录写到输出流中:public void findFile(String url;outputStream output) throws IOException

将客户上传来的查询字符串解析成名值对 放入到一个map中间:private void parseParameter(String querString);

最后一个方法 就是替换字符串中的指定字符:private static String replace(String sorceStr,String fromStr,String toStr)三个变量分别表示源字符串,需要被替换的字符串 替换厚的目标字符串。


接下来就分析没一个方法的实现:



1:public void sendStaticResource(){

Try{

//这里的request 是客户端的请求参数 在request类中已经定义

findFile(request.getUrl,output)


}

Catch(Exceoption e)

{

System.out.println("get file error"+e);


}

Finally{

Try{

Output.close();

}

Catch(Exception e)

{}

}

}

这样就能把客户端的请求以静态的文本发送给客户端了


分享到:
评论

相关推荐

    基于LINUX系统的嵌入式WEB服务器的设计

    嵌入式WEB服务器是一种小型、轻便、低成本的WEB服务器,通常用于嵌入式系统中,例如路由器、交换机、智能家居设备等。它可以提供Web服务,实现远程监控和控制等功能。 SOCKET编程概述 SOCKET编程是网络编程的基础...

    java实现一个简单的Web服务器实例解析

    主要介绍了java实现一个简单的Web服务器实例解析,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下

    C语言实现的支持高并发、超高性能Web服务器源码.rar

    C语言实现的支持高并发、超高性能Web服务器源码,可以编译运行,使用高性能HTTP解析器fasterhttp作为其解析核心,在开启Keep-Alive和gzip压缩时(现代浏览器默认开启)性能比nginx约快3倍。 hetao功能: * 支持主流...

    xxe:小型Web服务器利用XXE

    小型Web服务器可以利用XXE 。 XXE ( Xml eXternal Entity )-基于在处理xml文档期间包含外​​部实体的一类漏洞。 安装和启动 git clone git@github.com:egorchistov/xxe.git pip install -r requirements.txt ...

    mongoose 小型 嵌入式 http 服务器

    跨平台:Linux / Unix,QNX,eCos,...DNS客户端、DNS服务器、异步DNS解析器 源代码基于ISO C和ISO C++标准 集成简单,只有一个.c和.h文件 经过广泛的测试,已经维护了十年,并被NASA、dell和RocketUncle公司集成

    中小型企业基于Linux系统网络服务器的架设.doc

    中小型企业基于Linux系统网络服务器的架设 中小型企业基于Linux系统网络服务器的架设是指利用Linux操作系统搭建的...该架设需要选择合适的Linux操作系统、Web服务器、域名解析服务器、邮件服务器、文件传输服务器等。

    利用node.js搭建简单web服务器的方法教程

    早先不使用web服务器的情况下想要在浏览器端访问本地资源,可以利用firefox浏览器,其可以自己启动一个小型web服务器。 为了让刚接触node的人也能大体看懂,本文的代码我将尽量简化。 准备 首先,需要安装nodejs,这...

    hyper-sam:具有服务器端渲染支持的小型Web应用程序框架

    由HyperHTML和SAM模式提供支持的Web应用程序框架。 通过SAM容器进行应用渲染 每个组件都可以是无状态功能。 包装连接功能(cn)可用于将状态或动作注入到道具中。 它还允许在渲染时重用DOM节点。 动作建议状态更新...

    Linux环境下配置Tomcat服务器

    在开发和调试 JSP 程序时,需要一个服务器来解析 jsp 程序。Tomcat 就是这样一个服务器,它可以解析 jsp 程序,并将其转换为 HTML 页面,从而使用户可以通过浏览器访问这些页面。Tomcat 是一个独立的应用服务器,...

    PHP与Web页面交互操作实例分析

    主要介绍了PHP与Web页面交互操作,结合实例形式分析了PHP与Web页面交互表单数据提交、特殊字符处理相关操作技巧,需要的朋友可以参考下

    postfix-parser:用于Postfix SMTP日志的快速Python日志解析器,带有用于分析日志的简单WebUI

    Privex的Postfix日志解析器+ Web UI 这是一个小型应用程序,旨在解析Postfix SMTP服务器的日志输出(通常为/var/log/mail.log ),并将其转换为内部易于查询的数据。 它包括一个用和构建的Web 允许直接从浏览器轻松...

    信息检索报告1

    本报告主要介绍了基于Flask框架的Web应用程序开发,包括使用 Bootstrap 框架的CSS样式、使用Werkzeug 和WSGI的Web服务器、使用Jinja2模板引擎、使用Flask的BSD许可证、Flask的“microframework”结构、Flask的扩展...

    LINUX基础与服务器架构课程 大作业

    搭建小型公司局域网服务器,并实现以下服务: 1.DHCP服务 2.Samba共享服务 3.ftp文件共享服务 4.Web网站服务 5.DNS域名解析服务 【环境搭建】(测试客户端系统版本不做强制限制,也可以使用win7,win10虚拟机) ...

    通过宽带路由器搭建FTP服务器.pdf

    DDNS功能是路由器提供的一种功能,可以实现动态域名转换,通过DDNS功能,可以实现FTP服务器的域名解析。 知识点6:宽带路由器的特点 宽带路由器具有以下特点: * 支持虚拟服务器 * 提供架设服务器功能 * 可指定...

    Python网络安全项目开发实战_看清Web攻击_编程案例解析实例详解课程教程.pdf

    本章来看一下 Web 攻击到底是怎样的,进而更好地防止自己遭到 Web 攻击。本章仅讲解攻击的过程,不针对任何具体的主机或服务器。不管是国内巨头 BAT,还是国外的 Google、MicroSoft、FaceBook……都不能保证自己...

    common:通用Java库-具有简化的企业服务器的简单,小型,稳定和快速的库(依赖注入,WebServer和ORM框架)

    该库可以像带有依赖性注入的小型企业服务器,嵌入式WebServer,ORM框架一样工作。 常见的Java库功能: 睡眠/延迟/暂停 基准计时器 随机范围发生器 文件操作 任务/线程/调度程序 反射 JSON格式 网址 记录中 弦乐 ...

    WinCC客户机服务器结构.doc

    " "最大值 " "服务器或冗余服务器对1) "12 " "系统中的 WinCC 客户机 "32 2) 3) " "系统中的 Web 客户机 "50 4) " 表1 1) 中央归档服务器会被视为一个服务器。但它无法被同时当作操作单元使用。 2) 如果服务器也...

    Nginx版UPUPW PHP绿色服务器平台

    phpMyAdmin/4.8.2 开源、基于WEB而小巧的数据库管理程序; SendMail 目前使用最为广泛的一种E-mail服务器邮件传输代理程序; FileZilla server/0.9.60.2 高安全、高性能FTP服务器端程序可以单独作为FTP服务器端...

    Cookie、Session、Token、JWT

    它们在Web应用程序中起到关键的作用。 Cookie:Cookie 是服务器在客户端存储的小型数据文件。它通常用于在客户端存储用户的身份验证信息或其他状态数据。当客户端请求服务器时,会将 Cookie 信息附加在 HTTP 请求的...

    Java Web编程宝典-十年典藏版.pdf.part2(共2个)

    1.4 JavaWeb应用的Web服务器Tomcat 1.4.1 Web应用服务工作原理 1.4.2 web应用服务器汇总 1.4.3 获取Tomcat 1.4.4 熟悉Tomcat的五脏六腑 1.5 JavaWeb开发利器之Eclipse 1.5.1 获取Eciipse 1.5.2 运行Eclipse 1.5.3 ...

Global site tag (gtag.js) - Google Analytics