任务
找到如何截获http的socket请求,然后才能干预tomcat处理http请求。
编译jsp文件的跟踪:
网站访问日志阀AccessLogValve
可以看到两个过程的公共之处。那就是前四个
是跟Socket有关的,属于底层协议处理。在第4个调用再往后就是跟request和response打交道了。
因此,我需要研究前4个函数的作用。下面就逐一进行。
(一) 首先是thread.run肯定就是我们的jre运行java程序的共用部分,所以无需细致研究。
(二) 然后就是JIoEndpoint的Worker的run方法.
让我们耐心一点,看一看JIoEndpoint的结构吧。
首先这个jioEndpoint文件其中包含:1个内部接口和3个内部类,剩下的就是本身的属性和方法。其中的serverSocket成员让我们想到了《网络编程详解》中的讲解。
可以看出1个内部接口和3个内部类都是为了声明内部成员变量的类型而进行定义的。
接着切入正题吧,看来是Thread中的
public void run() {
if (target != null) {
target.run();
}
}
调用了jioEndpoint.java中的worker类型对象的run()方法。
public void run() {
//直到收到关闭信号,否则一直处理请求
while (running) {
// 等到指派来的下一个socket对象
Socket socket = await();
//await函数是worker的内部方法,作用是Await a newly assigned Socket from our Connector
if (socket == null)
continue;
// 处理这个socket发出的请求,
//setSocketOption是JIoEndpoint的方法,作用是为这个socket设置一些timeout, linger。
//handler.process其中handler是JIoEndpoint的一个成员变量,实际上就是结果socket处理的接力棒,通过它来处理这个socket对象
if (!setSocketOptions(socket) || !handler.process(socket)) {红色部分就是下一部分要讨论的内容
// Close socket
try {
socket.close();
} catch (IOException e) {
}
}
// Finish up this request
socket = null;
recycleWorkerThread(this);
}
}
(三) 这个handler好像在初始化的时候被设置成了Http11ConnectionHandler,这样我们就到达了Http11Protocol文件的Http11ConnectionHandler内部类的public boolean process(Socket socket)方法,这个方法实现是这样的:
public boolean process(Socket socket) {
Http11Processor processor = null;
try {
processor = localProcessor.get();
if (processor == null) {
processor =
new Http11Processor(protocol.maxHttpHeaderSize, protocol.endpoint);
processor.setAdapter(protocol.adapter);
…
processor.setServer(protocol.server);
localProcessor.set(processor);
if (protocol.getDomain() != null) {
synchronized (this) {
try {
RequestInfo rp = processor.getRequest().getRequestProcessor();
rp.setGlobalProcessor(global);
ObjectName rpName = new ObjectName
(protocol.getDomain() + ":type=RequestProcessor,worker="
+ protocol.getName() + ",name=HttpRequest" + count++);
Registry.getRegistry(null, null).registerComponent(rp, rpName, null);
} catch (Exception e) {
log.warn("Error registering request");
}
}
}
}
if (processor instanceof ActionHook) {
((ActionHook) processor).action(ActionCode.ACTION_START, null);
}
if (protocol.secure && (protocol.sslImplementation != null)) {
processor.setSSLSupport
(protocol.sslImplementation.getSSLSupport(socket));
} else {
processor.setSSLSupport(null);
}
processor.process(socket);
return false;
} catch(java.net.SocketException e) {
// SocketExceptions are normal
Http11Protocol.log.debug
分享到:
相关推荐
标题“Tomcat分配请求之——Socket获取请求”主要涉及的是Tomcat服务器在处理HTTP请求时的核心机制。在Web服务器中,Tomcat是一个广泛使用的开源应用服务器,它负责解析并响应来自客户端(如浏览器)的HTTP请求。这...
### tomcat源码解析 #### 简介与概览 Tomcat作为一款开源的Servlet容器,被广泛应用于Java Web应用的开发与部署环境中。它不仅支持Servlet API,还支持JSP规范,使得开发者能够轻松地构建动态网页。本文旨在深入...
- **线程模型**:Tomcat采用多线程模型处理请求,每个连接请求都会分配到一个工作线程来处理。这种模型能够有效地利用多核CPU资源,提高并发性能。 - **配置文件解析**:Tomcat使用XML配置文件来设置服务器行为,如...
Tomcat源码剖析 : 整体架构 层层分析 源码解析 架构分析 (Http服务器功能:Socket通信(TCP/IP)、解析Http报文 Servlet容器功能:有很多Servlet(自带系统级Servlet+自定义Servlet),Servlet处理具体的业务逻辑...
《深入剖析Tomcat源码:揭示Web服务器内部机制》 Tomcat,作为一款广泛应用的开源Java Servlet容器,其源码的解析对于理解Web服务器的工作原理、优化应用性能以及进行定制化开发具有重大意义。本文将从核心组件、...
开发者可以通过阅读源码了解Tomcat如何处理请求,如何调度线程,以及如何优化内存和网络资源的使用。 至于“工具”标签,`Connector`类的配置和管理通常在Tomcat的`server.xml`配置文件中进行。这里可以设置端口号...
tomcat的基础脚本分析 tomcat的源码启动分析 tomcat的web应用启动分析 tomcat的socket分析 tomcat的cocket与容器对接时序分析
从零手写Tomcat【源码】【abl-tomcat-001】【准备步骤,基础Socket通信环境搭建】 文章地址:https://blog.csdn.net/m0_37969197/article/details/123956989 目录地址:...
/********** 本例子是本人参考网上的例子,重新整理和修改的例子,非常简单和具有针对性****/ 1.背景:Flex Socket通信及安全策略,使用flex实现客户端,java实现...需要在java服务端开通843权限策略,具体看例子源码
C++通常用于编写高性能、底层的系统级程序,而将它与Tomcat结合,可能是为了创建一个混合式的解决方案,即在C++中实现复杂的音频处理算法,然后通过Tomcat来提供网络服务,使得这个变声功能可以通过网络接口被其他...
标题中的“Tomcat7、Chrome下web socket的一个例子”揭示了我们要探讨的核心技术点,即在Tomcat 7服务器上使用Web Socket与Google Chrome浏览器进行实时双向通信的应用示例。Web Socket是HTML5引入的一种新的通信...
基于Tomcat6的CAS SSO配置涉及的主要知识点包括SSO(Single Sign-On,单点登录)、CAS(Central Authentication Service,中心认证服务)、SSL(Secure Socket Layer,安全套接层)以及Tomcat服务器的配置。...
- 重启Tomcat,现在Tomcat已经具备了处理PHP请求的能力。 这样的集成方式让开发者可以利用Tomcat的高性能特性,同时在需要的地方引入PHP的灵活性和丰富生态。不过需要注意的是,这种方式可能不如直接使用专门的PHP...
1. 阅读源码:了解Tomcat如何处理请求、管理Servlet实例以及加载Web应用。 2. 编译与构建:通过Maven或者Ant工具,可以编译源码并生成可运行的Tomcat。 3. 调试与扩展:利用IDE如Eclipse或IntelliJ IDEA进行源码级...
深入剖析tomcat第三章SocketInputStream源码 * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/util/StringManager.java,v 1.2 2001/07/22 20:25:14 pier Exp $ * $Revision: 1.2...
通过以上步骤,我们可以构建一个简单的Windows环境下的Apache和Tomcat负载均衡系统,它能够根据配置自动将请求分发到不同的Tomcat实例,提高系统处理能力,并提供一定的容错性。在实际应用中,还需要考虑监控、故障...
邮件开发网(ExtMail Dev Networks)的文档“Tomcat Server处理一个http请求的过程”可能是对上述流程的一个详细解释,可能包含了更多关于Tomcat内部工作原理和Struts集成的信息。如果你在处理邮件系统相关的开发,...
6. 使用持续集成工具(如Jenkins、Travis CI等)自动化测试过程。 7. 分析测试报告,找出性能瓶颈和潜在的bug。 总之,"tomcat connectors"是Tomcat服务器的核心组件,Python和Selenium则是测试Web应用程序的强大...
在IT行业中,开发Java Web应用时,MyEclipse是一款常用且功能强大的集成开发环境(IDE),它提供了丰富的工具集来支持开发、测试和部署过程。本文将深入探讨如何使用MyEclipse进行远程调试Tomcat服务器上的项目,...