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/,测试结果
分享到:
相关推荐
源码分析对于开发者来说是一种深入理解软件内部运作机制的重要途径。`apache-tomcat-8.5.47-src.zip`这个压缩包包含了Tomcat 8.5.47版本的完整源代码,这对于想要研究Tomcat工作原理、优化性能或者进行自定义扩展的...
源码分析是提升开发者对服务器内部运作机制理解的重要途径,尤其对于Tomcat这样的核心组件,源码的学习能够帮助我们更深入地理解Web应用的部署、运行以及性能优化。 首先,我们要了解Tomcat的架构。Tomcat7基于...
总结,Apache Tomcat Connectors是Apache和Tomcat集成的关键组件,通过源码分析和Linux环境下的整合步骤,我们可以更好地理解和控制它们之间的交互,从而提升网站的性能和稳定性。在实际应用中,灵活配置和优化连接...
总结,Tomcat6源码分析是深入了解Web服务器运行机制的重要途径,通过对源码的学习,我们可以掌握其内部的工作原理,从而在实际开发中实现更高效、更稳定的应用部署和维护。这是一份宝贵的资源,值得我们深入研究和...
这个压缩包包含了两个版本的Tomcat源码:apache-tomcat-7.0.62-src和apache-tomcat-6.0.39-src,这两个版本分别代表了Tomcat在不同时间点的开发状态和技术特性。 首先,让我们从Apache Tomcat 6.0.39源码开始分析。...
【标题】"Tomcat 7.0.90 源码分析" 【内容】Apache Tomcat 是一个开源的、高性能的Java Servlet容器,它实现了Java EE中的Web应用服务器规范,特别是Servlet和JSP规范。这里我们关注的是Tomcat 7.0.90的源码,这个...
通过分析和学习Apache Tomcat的源码,开发者可以更好地理解Web服务器的工作原理,提高问题定位和性能优化的能力。同时,这也是深入学习Java Web技术的重要途径,有助于提升开发者在Web应用开发和服务器管理方面的...
### Tomcat架构的源码分析 #### 一、Tomcat的架构概述 Tomcat作为一款广泛使用的开源Java Servlet容器,其内部架构设计简洁而高效。本文档将对Tomcat的架构进行详细介绍,并从源码层面深入分析其核心组成部分。...
Apache Tomcat 8.5.23 源码分析 Apache Tomcat 是一个开源的、免费的Web服务器和Servlet容器,它实现了Java Servlet和JavaServer Pages(JSP)规范,...因此,对Tomcat源码的学习对于Java Web开发者来说是至关重要的。
【标题】"Tomcat源码分析系列文档"深入解析了Apache Tomcat服务器的内部工作原理,涵盖了一系列关键知识点,如HTTP协议、类加载机制、容器设计模式等。这些文档为理解Tomcat的运行机制提供了宝贵的资源。 【描述】...
Apache Tomcat 7 是一个广泛使用的开源Java Servlet容器,它实现了Java EE的Web应用程序部分,特别是Servlet和JSP规范。这个版本7.0.42是Tomcat 7的一个稳定版本,提供了对Java Servlet 3.0和JavaServer Pages (JSP)...
7. **源码分析**:深入学习Tomcat源码有助于理解其工作流程,包括请求处理、连接器(Connector)、容器(Container)架构、线程池管理、类加载机制(Class Loading)以及会话管理等核心概念。通过阅读源码,开发者...
以下是对Tomcat7启动流程的一个深入分析: 1. **启动脚本**:通过执行`startup.bat`或`startup.sh`(取决于操作系统)来启动Tomcat。这些脚本会调用`catalina.bat`或`catalina.sh`。 2. **加载Classpath**:在启动...
分析Tomcat 7的源代码可以帮助我们理解其在处理多线程、容器管理、安全策略等方面的设计决策。例如,`Catalina`是Tomcat的核心引擎,负责加载和管理Web应用程序;` Coyote `组件处理网络通信,如HTTP和AJP协议;` ...
《深入解析Tomcat Connectors:基于1.2.40源码分析》 Tomcat Connectors,也称为Coyote,是Apache Tomcat服务器的核心组件之一,负责处理HTTP、AJP等网络协议的连接和通信。最新版本的`tomcat-connectors-1.2.40-...
在源码分析中,开发者可以深入了解Tomcat如何处理请求、响应,以及它如何管理Web应用程序的生命周期。此外,对于性能优化、自定义行为或解决特定问题,源码阅读也是非常有价值的。 7.0.59和7.0.69之间的差异可能...
通常,这样的项目是用来实现将Tomcat应用服务器中的用户session数据存储在Redis中,以实现session的分布式管理和持久化。 【描述分析】 描述中的"tomcat-redis-session-manager-master" 重复了标题内容,暗示这是一...
深入学习jakarta-tomcat-connectors-1.2.15-src源码,可以提升对Tomcat工作流程的理解,包括请求的接收、处理、响应过程,以及如何通过连接器优化服务器性能。这对于进行性能调优、定制化开发或者排查系统问题都至关...
Apache Tomcat 6 是一个广泛使用的开源Java Servlet容器,它实现了Java EE的Servlet和JavaServer Pages(JSP)规范。这个压缩包包含了Tomcat 6的服务器版本和源代码,让我们来深入了解一下这两个组成部分以及它们的...