Implementation of InputBuffer which provides HTTP request header parsing as well as transfer decoding
socket能获得客户端发来的http协议,tomcat需要对http协议(传输的是byte流)进行解析,例如获得http的method,protocol,URI等信息.
既然是对byte流进行处理,tomcat封装了InternalInputBuffer。
-
public
class
InternalInputBuffer
extends
AbstractInputBuffer
public class InternalInputBuffer extends AbstractInputBuffer
核心函数为
public boolean parseRequestLine(boolean useAvailableDataOnly)
public boolean parseHeader()
有多个header,循环处理
-
public
boolean
parseHeaders()
-
throws
IOException {
-
-
while
(parseHeader()) {
-
}
-
-
parsingHeader = false
;
-
end = pos;
-
return
true
;
-
}
public boolean parseHeaders()
throws IOException {
while (parseHeader()) {
}
parsingHeader = false;
end = pos;
return true;
}
一个简单例子:
改写分析9中的例子
-
protected
boolean
processSocket(Socket socket)
throws
IOException {
-
-
InputStream inputsteam = socket.getInputStream();
-
Request request = new
Request();
-
InternalInputBuffer inputBuffer = new
InternalInputBuffer(request);
-
inputBuffer.setInputStream(inputsteam);
-
-
request.setInputBuffer(inputBuffer);
-
-
inputBuffer.parseRequestLine(false
);
-
-
System.out.println("@@@protocol="
+request.protocol().toString());
-
System.out.println("@@@method="
+request.method().toString());
-
-
-
-
-
-
-
-
-
-
return
true
;
-
}
protected boolean processSocket(Socket socket) throws IOException {
InputStream inputsteam = socket.getInputStream();
Request request = new Request();
InternalInputBuffer inputBuffer = new InternalInputBuffer(request);
inputBuffer.setInputStream(inputsteam);
request.setInputBuffer(inputBuffer);
inputBuffer.parseRequestLine(false);
System.out.println("@@@protocol="+request.protocol().toString());
System.out.println("@@@method="+request.method().toString());
/*
BufferedReader in = new BufferedReader(new InputStreamReader(
inputsteam));
String inputLine;
while ((inputLine = in.readLine()) != null) {
System.out.println(inputLine);
}
*/
return true;
}
在浏览器输入:localhost:8080/,测试结果
分享到:
相关推荐
分析Tomcat请求过程 链接器(Connector)与容器(Container) 解耦 Connector设计 监听服务端口,读取来自客户端的请求 将请求数据按照指定协议进行解析 根据请求地址匹配正确的容器进行处理 将响应返回客户端 ...
Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件,一步步的实现过程请下载本实例的Java源码,代码中包括丰富的注释,对学习有帮助。 Java实现的FTP连接与数据浏览程序 1个...
Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件,一步步的实现过程请下载本实例的Java源码,代码中包括丰富的注释,对学习有帮助。 Java实现的FTP连接与数据浏览程序 1个...
02设计模式与框架源码分析 03JVM与GC调优 04JUC并发编程与源码分析 05拥抱云原生 06分布式存储极致性能Redis6 07微服务框架核心源码深度解析 08RPC框架核心源码深度解析 09大数据与人工智能 10监控专题 技术...
第一篇(第1~7章)介绍网站相关的基础知识,涉及网站架构、网络通信的底层协议以及实现方法,并详细分析Tomcat的实现过程,旨在帮助大家整体掌握网站的结构并理解SpringMVC所处的位置。第二篇(第8~10章)对...
[置顶] SSO单点登录系列2:cas客户端和cas服务端交互原理动画图解,cas协议终极分析 http://blog.csdn.net/ae6623/article/details/8848107 目 录 1 引言 4 1.1 摘要 4 1.2 范围 4 1.3 读者对象 4 1.4 关键词 4 2 ...
7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) ...
7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) ...
该论文详细分析了当前形势下就业项目管理系统的研究背景,还论述了就业项目管理系统的开发流程及其是如何实现信息的规范化管理、 快速查询等功能的。随着大学生人数的不断增加,毕业生就业越来越难。为了更好地使大学...
7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) ...
7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) ...
7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) ...
7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) ...
7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) ...
7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) ...
7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) ...
7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) ...