《how tomcat work》 搬运工 charpter 4:Default Connector

Default Connector是Tomcat 4用的connector

Default Connector的工作是等待HTTP请求,创建request和response对象,然后传给container,然后container加载servlet来进行处理

Default Connector和charpter 3里的Connector区别是:

1、connector的HttpProcessor是同步的,要等到一个请求结束后才可以处理下一个请求。而Default Connector的HttpProcessor是在一个新的线程里进行的,也就是可以同时处理多个请求,而且HttpProcessor是从HttpProcessor poor里获取的

2、connecrot的HttpProcessor直接创建servlet来进行下一步处理,而Default Connector的HttpProcessor则通过Container来进行下一步处理。

Default Connector处理请求的流程:

1.等待请求

while (!stopped) {
    Socket socket = null;
     try {
            socket = serverSocket.accept();
     ...

2.获取HttpProcessor实例

       HttpProcessor processor = createProcessor();

3.assign socket

        processor.assign(socket);

HttpProcessor的处理流程

1.run是等待await()方法来获取socket,

public void run() {
// Process requests until we receive a shutdown signal
    while (!stopped) {
        // Wait for the next socket to be assigned
        Socket socket = await();
        if (socket == null)
            continue;
        // Process the request from this socket
        try {
                process(socket);
        }
        catch (Throwable t) {
            log("process.invoke", t);
        }
        // Finish up this request
        connector.recycle(this);
    } 

// Tell threadStop() we have shut ourselves down successfully
    synchronized (threadSync) {
        threadSync.notifyAll();
    }
}

2.await()方法

private synchronized Socket await() {
    // Wait for the Connector to provide a new Socket
    while (!available)
    {
        try {
            wait();
        } catch (InterruptedException e) {
        }
    }
    // Notify the Connector that we have received this Socket
    Socket socket = this.socket;
    available = false;
    notifyAll();
    if ((debug >= 1) && (socket != null))
        log(" The incoming request has been awaited");
    return (socket);
}

3.assign()方法

synchronized void assign(Socket socket) {
    // Wait for the processor to get the previous socket
    while (available) {
        try {
            wait();
        } catch (InterruptedException e) {
        }
    }
    // Store the newly available Socket and notify our thread
    this.socket = socket;
    available = true;
    notifyAll();
}

await()和assign()来靠bool available来判别是否已经存入socket

其中,wait()是将线程变成等待,而notifyAll()则是将所有线程(await())唤醒从而使await()返回socket

接下去就是container是事情了

时间: 2024-10-05 21:22:55

《how tomcat work》 搬运工 charpter 4:Default Connector的相关文章

《how tomcat work》 搬运工 charpter 3:Connector

这一章节主要是介绍了tomcat 的一个重要模块 connector,但只是一个缩减版 connector的作用是创建ServerSocket的实例serverSocket,绑定端口,监听端口,当接受到客户端请求时,就创建一个HttpProcessor实例processor,将serverSocket作为参数给HttpProcessor的实例processor.process(serverSocket)来处理请求 import java.io.IOException; import java.n

how tomcat work 搬运工(一)

charter 1 基本的服务端接收请求并处理 包和类 HttpServer  是主函数入口,通过await()方法新建ServerSock 对象实例来绑定端口,接收请求,通过请求来新建 Request 和 Response 对象实例, package com.howtomcatwork.xy; import java.net.Socket; import java.net.ServerSocket; import java.net.InetAddress; import java.io.Inp

[转]TOMCAT原理以及处理HTTP请求的过程、ContextPath ServletPath

一.TOMCAT 1 - Tomcat Server的组成部分 <Server> <Service> <Connector/> <Engine> <Host> <Context> </Context> </Host> </Engine> </Service> </Server> 1.1 - Server A Server element represents the enti

对tomcat来说,每一个进来的请求(request)都需要一个线程,直到该请求结束。

这段时间折腾了哈java web应用的压力测试,部署容器是tomcat 7.期间学到了蛮多散碎的知识点,及时梳理总结,构建良好且易理解的知识架构把它们组织起来,以备忘.对web应用开发者来说,我们很关心应用可同时处理的请求数,以及响应时间.应用本身和它运行在其中的web容器是两个很重要的影响因素.对tomcat来说,每一个进来的请求(request)都需要一个线程,直到该请求结束.如果同时进来的请求多于当前可用的请求处理线程数,额外的线程就会被创建,直到到达配置的最大线程数(maxThreads

Tomcat内部结构及请求原理(转)

Tomcat Tomcat是一个JSP/Servlet容器.其作为Servlet容器,有三种工作模式:独立的Servlet容器.进程内的Servlet容器和进程外的Servlet容器. Tomcat的组织结构 Tomcat是一个基于组件的服务器,它的构成组件都是可配置的,其中最外层的是Catalina servlet容器,其他组件按照一定的格式要求配置在这个顶层容器中. Tomcat的各种组件都是在Tomcat安装目录下的/conf/server.xml文件中配置的. Tomcat目录 tomc

linux-jdk安装,tomcat安装

一.下载jdk 官方下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html 二.linux安装jdk [[email protected] ~]# lsanaconda-ks.cfg              Desktop    icbc_auto_platform  jdk-8u131-linux-x64.rpm  mysql-5.6.13-linux-glibc2.5-x86_64         Pu

深入理解Tomcat系列之一:系统架构

前言 Tomcat是Apache基金组织下的开源项目,性质是一个Web服务器.下面这种情况很普遍:在eclipse床架一个web项目并部署到Tomcat中,启动tomcat,在浏览器中输入一个类似http://localhost:8080/webproject/anyname.jsp的url,然后就可以看到我们写好的jsp页面的内容了.一切都是那么自然和顺理成章,然而这一切都是源于tomcat带给我们的,那么在tomcat背后,这一切又是怎么样发生的呢?带着对tomcat工作原理的好奇心,我决定

Tomcat启动过程原理详解

基于Java的Web 应用程序是 servlet.JSP 页面.静态页面.类和其他资源的集合,它们可以用标准方式打包,并运行在来自多个供应商的多个容器.Web 应用程序存在于结构化层次结构的目录中,该层次结构是由 Java Servlet 规范定义的.Web 应用程序的根目录包含直接存储或存储在子文件夹中的所有公共资源,比如图像.HTML 页面等.构成:Web应用由Web组件(一组Java类库).html文件,静态资源文件(如图像).帮助类和库组成. 1 – Tomcat Server的组成部分

Ubuntu 下 JDK+Tomcat+MySql 环境的搭建

3.    安装 MySql 3.1    安装 使用 apt-get install 方式安装,终端输入:sudo apt-get install mysql-server-5.1  ( 小提示: 搜索软件: apt-cache search 软件名关键字,支持模糊查询, 譬如: apt-cache search mysql ) 安装过程中,有两次提示输入 mysql 的 root 账号的密码,这里输入 root ,确定,直至安装完成. 3.2    创建用户 Mysql 安装完之后,已自动启