删了很多,只留下了主要脉络,以便回忆TOMCAT如何做到多线程处理请求
/**
* The set of processors that have been created but are not currently
* being used to process a request.
*/
private Stack processors = new Stack();
/**
* The set of processors that have ever been created.
*/
private Vector created = new Vector();
/**
* The current number of processors that have been created.
*/
private int curProcessors = 0;
/**
* Create (or allocate) and return an available processor for use in
* processing a specific HTTP request, if possible. If the maximum
* allowed processors have already been created and are in use,
* returnnull instead.
**/
private HttpProcessor createProcessor() {
synchronized (processors) {
if (processors.size() > 0) {
// if (debug >= 2)
// log("createProcessor: Reusing existing processor");
return ((HttpProcessor) processors.pop());
}
if ((maxProcessors > 0) && (curProcessors < maxProcessors)) {
// if (debug >= 2)
// log("createProcessor: Creating new processor");
return (newProcessor());
} else {
if (maxProcessors < 0) {
// if (debug >= 2)
// log("createProcessor: Creating new processor");
return (newProcessor());
} else {
// if (debug >= 2)
// log("createProcessor: Cannot create new processor");
return (null);
}
}
}
}
/**
* Create and return a new processor suitable for processing HTTP
* requests and returning the corresponding responses.
*/
private HttpProcessor newProcessor() {
// if (debug >= 2)
// log("newProcessor: Creating new processor");
HttpProcessor processor = new HttpProcessor(this, curProcessors++);
if (processor instanceof Lifecycle) {
try {
((Lifecycle) processor).start();
} catch (LifecycleException e) {
log("newProcessor", e);
return (null);
}
}
created.addElement(processor);
return (processor);
}
/**
* The background thread that listens for incoming TCP/IP
*connections and
* hands them off to an appropriate processor.
*/
public void run() {
// Loop until we receive a shutdown command
while (!stopped) {
// Accept the next incoming connection from the server socket
Socket socket = null;
try {
// if (debug >= 3)
// log("run: Waiting on serverSocket.accept()");
socket = serverSocket.accept();
// if (debug >= 3)
} catch (Exception e) {
continue;
}
// Hand this socket off to an appropriate processor
HttpProcessor processor = createProcessor();
if (processor == null) {
try {
socket.close();
} catch (IOException e) {
;
}
continue;
}
// if (debug >= 3)
// log("run: Assigning socket to processor " + processor);
processor.assign(socket);
}
}
分享到:
相关推荐
server.xml位于Tomcat的conf目录下,是Tomcat的主要配置文件,负责配置服务器的各种特性,包括监听的端口、连接器、虚拟主机等。其中,元素用于配置虚拟主机的相关属性,而元素用于定义特定Web应用的属性。 要修改...
5. **配置Tomcat服务器**: 在Tomcat的`server.xml`文件中,需要开启AJP连接器,指定监听端口(默认为8009),如: ```xml ``` 6. **重启服务器**: 完成以上配置后,需要重启Apache和Tomcat服务器使改动生效。 ...
这条语句表示给予`/var/lib/tomcat5.5/webapps/项目名称/`下的所有代码全权限(`AllPermission`),这将覆盖Java默认的安全策略,使得Web应用能够连接到本地的MySQL数据库。如果不确定应放入哪个`.policy`文件,可以...
### 修改Tomcat默认编码以消除GET方式传递参数出现的中文乱码 在处理Web应用程序时,尤其是使用Apache Tomcat作为应用服务器的情况下,遇到中文字符乱码的问题是非常常见的。这一问题通常发生在通过GET方法传递含有...
Tomcat连接器(Connector)是Apache Tomcat服务器的核心组件之一,负责接收客户端的连接请求,创建请求对象,将请求分派给处理请求的Servlet容器,并最终返回响应。在Tomcat的配置和性能优化中,了解如何设置连接数...
其次,需要正确地配置 Tomcat 的 SSL 连接器。在 Tomcat 中,SSL 连接器是负责处理 SSL 加密连接的组件。需要正确地配置连接器的端口号、协议、证书文件和密码等信息。 再次,需要正确地配置 Tomcat 的 APR 模块。...
8. **NIO和APR连接器**:Tomcat 7.0提供了两种连接器选项,即NIO(非阻塞I/O)和APR(Apache Portable Runtime),用户可以根据需求选择更适合的连接器以优化性能。 9. **错误处理**:Tomcat 7.0改进了错误页面处理...
### 第4章:Tomcat的默认连接器 这一章重点讲解了Tomcat的默认连接器实现——HttpConnector类。分析了HTTP/1.1协议的新特性,如持久化连接、编码方式、状态码100的使用等。通过实例,读者可以学习如何创建...
Tomcat5相较于Tomcat4,增加了对Servlet2.4和JSP2.0规范的支持,并且使用了更有效的默认连接器。Tomcat5的后台处理线程是共享的,相比于Tomcat4中每个组件都有自己的处理线程,Tomcat5能更高效地利用资源。此外,...
在使用Tomcat 7.0.53时,用户可能需要自定义`conf`目录下的配置文件来满足特定需求,例如调整服务器端口、设置访问日志、配置连接器等。同时,为了保证安全性,定期更新Tomcat至最新版本以获取最新的安全补丁是非常...
通过合理地配置 Tomcat 8 的连接器,可以极大地提高其处理能力和服务质量。开发者可以根据应用的特点和负载情况,选择合适的连接器类型和配置参数,以达到最佳性能。此外,对于安全性有较高要求的应用,还可以通过...
5. **连接器(Connector)配置**:在Apache的httpd.conf或独立的配置文件中,需要定义连接器来指定如何与Tomcat交互。例如,使用`ProxyPass`和`ProxyPassReverse`指令来定义路径映射。 6. **Session粘滞(Session ...
#### 第4章 tomcat的默认连接器 本章深入探讨了Tomcat的默认连接器实现细节,包括HTTP/1.1的新特性及其对连接器的影响。 ##### 简介 Tomcat的默认连接器是一个高度可配置的组件,支持多种协议和配置选项。 #####...
- **连接器性能**:相比于Tomcat 4,Tomcat 5提供了更为高效的默认连接器。 - **线程模型**:Tomcat 5采用共享的后台处理线程池,而Tomcat 4的每个组件都有独立的后台线程。这种改进提高了Tomcat 5的资源利用效率和...
5.5版本还改进了连接器模块,支持HTTP/1.1协议的更多特性,比如持久连接和压缩传输,从而提高网络效率。 在解压这个"tomcat安装包"后,用户通常会找到以下几个关键文件夹和文件: 1. `bin`:包含启动、停止和管理...
### Linux 下 Tomcat 优化设置最大连接数及内存 JConsole 监控 #### 一、Tomcat 内存优化 ##### 1.1 基本原理 在启动 Java 应用程序时,JVM(Java 虚拟机)会为应用程序分配一定的初始内存和最大内存。这些设置对...
Tomcat采用NIO(非阻塞I/O)或BIO(阻塞I/O)模型,Coyote连接器负责这部分实现。NIO模型在高并发环境下表现出色,因为它可以处理大量并发连接,而无需为每个连接创建新线程。 四、Tomcat7的部署与管理 Tomcat7...
正确配置Tomcat的JVM内存和连接器参数,对于优化Web应用性能、提升用户体验至关重要。通过对`-Xms`、`-Xmx`等参数的细致调整,结合适当的垃圾回收策略,以及合理设置连接器参数,可以显著增强Tomcat服务器的稳定性和...
通过自定义 `TomcatEmbeddedServletContainerFactory` 类,我们可以优化连接器协议、线程池设置等关键参数,从而提高应用的性能和稳定性。记得在配置时充分考虑应用的特点和预期的负载情况,以实现最佳的性能效果。