`
zddava
  • 浏览: 243035 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Tomcat请求处理(一) -- 服务器端口监听

阅读更多
其实tomcat在哪个类中监听请求的代码很容易找到:

在org.apache.tomcat.util.net.JIoEndpoint$Acceptor#run()中的这么一句:

Socket socket = serverSocketFactory.acceptSocket(serverSocket);

可是ServerSocketFactory是个抽象类,我还是很想知道整个过程的来龙去脉的。

那就要还是从初始化开始,当Tomcat的HTTP Connector初始化,会org.apache.coyote.http11.Http11Protocol调用它的init()方法。

在这个init()方法中,又调用了org.apache.tomcat.util.net.JIoEndpoint#init(),代码如下:

	public void init() throws Exception {
		if (initialized)
			return;

		// acceptor线程的数量
		if (acceptorThreadCount == 0) {
			acceptorThreadCount = 1;
		}

		// 返回DefaultServerSocketFactory类对象做为ServerSocketFactory的实例
		if (serverSocketFactory == null) {
			serverSocketFactory = ServerSocketFactory.getDefault();
		}
		// 创建ServerSocket
		if (serverSocket == null) {
			try {
				if (address == null) {
					serverSocket = serverSocketFactory.createSocket(port, backlog);
				} else {
					serverSocket = serverSocketFactory.createSocket(port, backlog, address);
				}
			} catch (BindException be) {
				if (address == null)
					throw new BindException(be.getMessage() + "<null>:" + port);
				else
					throw new BindException(be.getMessage() + " " + address.toString() + ":" + port);
			}
		}

		initialized = true;

	}


现在已经知道了文章最初提到的serverSocketFactory引用的是一个DefaultServerSocketFactory类的对象。并且在这里创建了一个ServerSocket对象。

当Tomcat初始化完毕执行一些列开启服务的动作时,HTTP Connector也会执行它的start()方法,然后会调用Http11Protocol的start()方法,最后程序会执行到JIoEndpoint#start(),下面来看一下:

	public void start() throws Exception {
		if (!initialized) {
			init();
		}

		if (!running) {
			running = true;
			paused = false;

			// 先初始化一些Worker
			if (executor == null) {
				workers = new WorkerStack(maxThreads);
			}

			// 开启Acceptor线程,默认只开启一个Acceptor线程,见JIoEndpoint#init()。
			for (int i = 0; i < acceptorThreadCount; i++) {
				Thread acceptorThread = new Thread(new Acceptor(), getName() + "-Acceptor-" + i);
				acceptorThread.setPriority(threadPriority);
				acceptorThread.setDaemon(daemon);
				acceptorThread.start();
			}
		}
	}


这样,就开启了一个Acceptor线程,接下来看一看这个线程做了什么东西。

		public void run() {
			while (running) {

				while (paused) {
					try {
						Thread.sleep(1000);
					} catch (InterruptedException e) {
					}
				}

				try {
					// 开始监听端口
					Socket socket = serverSocketFactory.acceptSocket(serverSocket);
					// 初始化Socket
					serverSocketFactory.initSocket(socket);
					if (!processSocket(socket)) {
						try {
							socket.close();
						} catch (IOException e) {
						}
					}
				} catch (IOException x) {
					if (running)
						log.error(sm.getString("endpoint.accept.fail"), x);
				} catch (Throwable t) {
					log.error(sm.getString("endpoint.accept.fail"), t);
				}
			}

		}


至此,Tomcat开启了一个端口进行请求的监听。
分享到:
评论
1 楼 hdwmp123 2014-07-17  

相关推荐

    tomcat85-session-redis工具jar包

    总的来说,"tomcat85-session-redis工具jar包"是一个增强Tomcat性能和可扩展性的实用工具,它通过整合Redis实现了session的分布式管理,对于需要处理大量并发用户请求且要求高可用性的Web应用来说,这是一个非常有...

    apache-tomcat-8.5.47-windows-x64.zip

    Apache Tomcat是一个开源的Web服务器和Java应用服务器,主要用于运行Java Servlet和JavaServer Pages(JSP)技术。这个"apache-tomcat-8.5.47-windows-x64.zip"压缩包是针对Windows 64位系统的Tomcat 8.5.47版本。在...

    apache-tomcat-8.5.45-windows-x64.zip

    Apache Tomcat是一个开源的软件应用服务器,主要用于运行Java Servlets和JavaServer Pages(JSP)。在本案例中,我们讨论的是Apache Tomcat的8.5.45版本,专为64位Windows操作系统设计的安装包。这个压缩文件`apache...

    tomcat-connectors-1.2.40-windows-x86_64-httpd-2.4.x.zip mod_jk 64位

    此外,还需要在Tomcat的`conf/server.xml`文件中配置AJP监听器,以便Tomcat可以接收来自`mod_jk`的请求。通过这种方式,Apache HTTP Server可以作为前端服务器处理静态内容,而Tomcat则专注于处理Java Web应用程序,...

    tomcat-connectors-1.2.37-windows-i386-httpd-2.x.x

    在部署和配置过程中,用户需要将正确的连接器模块加载到Apache配置文件(如httpd.conf)中,设置相应的监听端口和协议,确保Apache能够识别并转发请求给Tomcat。同时,还需要正确配置Tomcat服务器,以便接受来自...

    tomcat-connectors-1.2.40-src.zip

    这两个类实现了`Connector`接口,负责监听端口、接收请求并转发给相应的Servlet容器处理。 二、Http11Protocol详解 1. 请求接收:`Http11Processor`类是Http11Protocol的核心,它负责解析接收到的HTTP请求数据,将...

    最新版windows apache-tomcat-8.5.59-windows-x64.zip

    "conf"目录存储了Tomcat的配置文件,如`server.xml`,它是核心配置文件,定义了服务器的各个部分,包括监听端口、连接器、虚拟主机等。"webapps"目录是默认的Web应用程序部署位置,你可以将WAR文件或已解压的Web应用...

    apache-tomcat-7.0.50-windows-x86

    5. **连接器与端口**:Tomcat通过Connector组件与网络通信,通常默认监听8080端口处理HTTP请求。可以在server.xml的元素中更改端口设置。 6. **安全性**:Tomcat提供基于角色的访问控制(RBAC)以及SSL/TLS支持,...

    apache-tomcat-7.0.39-src

    - `server.xml`:这是Tomcat的主配置文件,包含服务器的端口设置、Connector配置(处理不同协议,如HTTP/HTTPS)、Context配置(定义每个Web应用的路径和属性)等。 - `context.xml`:可以用来定义特定Web应用的...

    apache-tomcat-7.0.59-windows-x64_免安装

    - ** Coyote**:处理HTTP连接的组件,负责监听端口并响应请求。 - **Jasper**:负责JSP编译成Servlet的引擎。 - **Commons Daemon**:用于Windows平台的服务控制。 5. **安全管理:** - **设置用户和角色**:...

    apache-tomcat-7.0.86-windows-x64

    64位版本的Tomcat可以利用更多的内存,这对于处理大量请求或者运行大型Web应用程序的服务器来说非常重要。 3. **免安装版本**: 免安装版本的Apache Tomcat不需要通过传统的安装程序进行安装,而是可以直接解压缩到...

    apache-tomcat-8.0.17-windows-x64.zip

    在安装和配置Tomcat时,你需要修改`conf/server.xml`来设置端口号、服务器监听地址和其他配置。同时,为了安全考虑,你可能需要调整`conf/tomcat-users.xml`以添加用户和角色,进行基本的身份验证。 使用Tomcat进行...

    apache-tomcat-8.0.28-windows-x64

    Apache Tomcat 8.0.28 是一个广泛使用的开源软件,主要作为Java Servlet和JavaServer Pages(JSP)的Web应用服务器。Tomcat是Apache软件基金会Jakarta项目的一部分,它实现了Java EE(现称为Jakarta EE)的Web部分,...

    apache-tomcat-10.0.0-M7-windows-x64.zip

    - `server.xml`是核心配置文件,你可以在这里定义服务器的端口号、连接器、监听器、全局JNDI资源等。 - `context.xml`可以用来配置特定应用程序的属性,例如数据源或会话超时。 3. **启动与关闭**: - 在命令行...

    apache-tomcat-7.0.96-windows-x64.zip

    Apache Tomcat 7.0.96 ...总之,Apache Tomcat 7.0.96是一个功能强大且易于使用的Web服务器,适合初学者和经验丰富的开发者。通过深入理解其配置、管理和安全机制,可以更好地利用Tomcat搭建高效、安全的Java Web环境。

    apache-tomcat-6.0.44

    5. **连接器与端口**:Tomcat通过Connector组件处理HTTP请求,缺省情况下监听8080端口。可以在`server.xml`的`&lt;Connector&gt;`标签中修改端口号。 6. **JNDI资源**:Tomcat支持JNDI(Java Naming and Directory ...

    Tomcat7.0.8-win-x64x

    这个文件通常包含了Tomcat服务器的所有核心组件,如Catalina(核心Servlet容器)、 Coyote(连接器处理HTTP请求)、 Jasper(JSP编译器),以及其他必要的库和配置文件。 在实际使用中,部署Tomcat时,你需要解压这...

    how tomcat works和jetty-src和tomcat7-src

    1. **接收请求**:当客户端发送HTTP请求到Tomcat时,服务器会通过网络监听端口捕获该请求。 2. **解析请求**:Tomcat将接收到的原始字节流转换为HTTP请求对象,解析请求头和请求体。 3. **调度请求**:基于请求的URL...

    tomcat源码,servlet-api源码

    然后,通过Catalina创建并初始化各个组件,如Connector(监听端口)和Executor(线程池)。接着,Coyote处理接收到的HTTP请求,转发给对应的Servlet进行处理。 4. **会话管理** Tomcat提供了基于cookie的会话管理...

Global site tag (gtag.js) - Google Analytics