该简易的J2EE WEB容器缺失很多功能,却可以提供给大家学习HTTP容器大致流程。
注:容器功能很少,只供学习。
1. 支持静态内容与Servlet,不支持JSP
2. 仅支持304/404
3. 该设计参考Jetty容器
GIT地址:https://git.oschina.net/redcode/jerry.git
一、HTTP请求处理流程:
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请