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

时间:2024.4.29

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

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

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

Socket socket = serverSocketFactory.acceptSocket(serverSocket);

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

那就要还是从初始化开始,当Tomcat的HTTP Connector初始化,

org.apache.coyote.http11.Http11Protocol调用它的init()方法。

在这个init()方法中,又调用了org.apache..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开启了一个端口进行请求的监听。


第二篇:Tomcat端口占用


假设80端口被占用

运行cmd,打开命令窗口,输入netstat -ano|findstr "8080"

TCP 0.0.0.0:80 0.0.0.0:0 LISTENING 4

TCP 0.0.0.0:8009 0.0.0.0:0 LISTENING 3876 TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 3876 TCP 127.0.0.1:8080 127.0.0.1:1541 ESTABLISHED 2752

最后一栏PID

打开win任务管理,选择PID列为216的进程结束

更多相关推荐:
Tomcat去除端口号和项目名

在一个项目结束的时候往往根据需要直接映射到一个IP地址上此时就需要去除端口和项目名了在访问的时候下面根据具体的例子提供一种实现方法1在进入TOMCATHOME创建文件夹将其命名为webdb此处为webdb根据需...

关于tomcat启动端口号被占用问题解决

有时候把在myeclpise项目部署到tomcat中的时候会莫名其妙的发现tomcat启动不了换成是myeclpise自带的tomcat启动还是无法成功启动看看控制台显示的错误信息有时候会看到javanetBi...

Tomcat 部署网站 去掉端口号和项目名称

一在一个项目结束的时候往往根据需要直接映射到一个IP地址上此时就需要去除端口和项目名了在访问的时候下面根据具体的例子提供一种实现方法1在进入TOMCATHOME创建文件夹将其命名为webdb此处为webdb根据...

Tomcat的安装与配置和Tomcat端口的配置

前沿1如果之前安装了Oreacla在使用tomcat是会出现8080端口被占用的情况发生解决的方法就是对tomcat的端口进行配置安装tomcat注意两个系统环境变量的配置JAVAHOMECATALINAHOM...

tomcat 8080端口被占用解决方法

tomcat因端口占用无法启动解决方法20xx0322223711分类技术分享标签tomcat端口占用解决方法8080jsp字号大中小订阅嗯嗯记录一下这个问题吧应该很多人会遇到其实端口占用问题不仅是tomcat...

tomcat端口解决办法

lt一gt首先是JDK环境变量配置在Windows系统中1右击我的电脑gt属性gt高级gt环境变量gt系统变量2新建建立javahome变量值CProgramFilesJavajdk160016JDK安装目录3...

Tomcat 修改默认端口 以及Tomcat设置虚拟目录

Tomcat修改默认端口以及Tomcat设置虚拟目录个人操作所获经验例虚拟目录改为Djsproot1建立Djsproot将tomcat下的webappsROOT目录下WEBINF文件复制到Djsproot中里面...

tomcat详细说明

Tomcat详细说明Tomcat详细说明11Tomcat背景12Tomcat的目录结构13tomcat类加载24ServerXml配置简介25Webxml配置管理56管理67Web应用部署的原理及其方式78常见...

windows下Tomcat负载均衡和集群配置

轻松实现ApacheTomcat集群和负载均衡作者罗代均ldjwork126com转载请保持完整性0环境说明Apacheapache20551个Tomcatapachetomcat5517zip版2个modjk...

Tomcat详细教程

随着java的流行其在web上的应用也越来越广tomcat作为一个开源的servlet容器应用前景越来越广本文将向你讲述tomcat的一些知识一简介tomcat是jakarta项目中的一个重要的子项目其被Jav...

服务器上同时布置两个tomcat

服务器上同时布置两个tomcat1服务器windows20xx使用压缩版的apachetomcat70542解压出两个tomcat保留一个tomcat的配置不变3增加环境变量CATALINAHOME2值为第二个...

Tomcat工作原理详解

Tomcat简介作者杨晓cnu1237288325一Tomcat背景自从JSP发布之后推出了各式各样的JSP引擎ApacheGroup在完成GNUJSP10的开发以后开始考虑在SUN的JSWDK基础上开发一个可...

tomcat 端口号(37篇)