server java_简易 HTTP Server 实现(JAVA)

该简易的J2EE WEB容器缺失很多功能,却可以提供给大家学习HTTP容器大致流程。注:容器功能很少,只供学习。1. 支持静态内容与Servlet,不支持JSP2. 仅支持304/4043. 该设计参考Jetty容器GIT地址:https://git.oschina.net/redcode/jerry.git一、HTTP请求处理流程:HTTP包的解析直接使用Socket读取InputStream,...
摘要由CSDN通过智能技术生成

该简易的J2EE WEB容器缺失很多功能,却可以提供给大家学习HTTP容器大致流程。

注:容器功能很少,只供学习。

1. 支持静态内容与Servlet,不支持JSP

2. 仅支持304/404

3. 该设计参考Jetty容器

GIT地址:https://git.oschina.net/redcode/jerry.git

一、HTTP请求处理流程:

b25772722a609d343230aac10dce806a.png

HTTP包的解析直接使用Socket读取InputStream,再根据HTTP协议读取HTTP请求头于数据体,HTTP GET请求头类似如下:

GET / HTTP/1.1

Accept: */*

Accept-Language: zh-CN

User-Agent:

Accept-Encoding: gzip, deflate

Host: www.baidu.com

Connection: Keep-Alive

1.如GET / HTTP/1.1代表是GET 请求,请求路径为/,协议版本为HTTP 1.1,中间使用空格分隔,请求头每个属性一行,使用\n换行(WINDOWS为\r\n)。

当解析Socket的InputStream的时候首先读取第一行,代码类似如下:

BufferedReader br = newBufferedReader(newInputStreamReader(socket.getInputStream()) );

String reqCmd=br.readLine();if(reqCmd == null){return null; //数据包不正常,忽略

}

String[] cmds= reqCmd.split("\\s");

2.POST 请求包类似如下:

POST /login HTTP/1.1

Accept: */*

User-Agent:

Host:

Pragma: no-cache

Cookie:

Content-Length: 25

count=1&viewid=lNe3tRpyVj

请求头后换行,再封装POST请

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值