通过分析 Tomcat catalina.bat 原理解析时,发现启动tomcat和关闭tomcat都是调用 MAINCLASS 启动类进行操作的。

这里有个疑问,既然都是通过调用 MAINCLASS 类进行操作的,那就是启动tomcat服务是一个进程、关闭tomcat服务应该是另一个进程。

那么如果是多个进程,是怎么互相操作的呢?带着疑问我们分析下tomcat的源码。

客户端操作(shutdown操作)

Bootstrap 类 main 方法

这里会调用stopServer() 方法

Bootstrap 类 stopServer() 方法


这里通过反射会调用 Calalina.java 中的 stopServer 方法

Calalina 类 stopServer() 方法

从该方法中我们发现,它是通过 socket 连接 要关闭的 tomcat 服务器,只发送一个 “SHUTDOWN” 字符串操作,就执行结束了。

Socket的ip和端口

SHUTDOWN 的默认ip是localhost,端口是通过tomcat\conf\server.xml中配置的,如下:

服务端操作(运行中的tomcat)

Catalina类 start 方法

Catalina.java 类中start方法中调用了两个方法如下:

  1. await() 方法监听停止服务请求的方法
  2. stop() 方法是停止服务的方法

await() 方法是阻塞方法,只有客户端请求关闭tomcat服务时,他才会执行stop() 方法,否则一直等待关闭请求。

StandardServer 类 await 方法


通过源码,可以看出,这里开启了一个ServerSocket,端口是Server.xml 中配置的 shutdown 端口。
然后调用socket.accept() 方法监听停止tomcat服务的请求。

**这里的address默认是”localhost”,也就是只监听ip是localhost上的关闭请求。
如果想支持远程关闭,可以这样配置:**

<Server port="8085" shutdown="SHUTDOWN" address="192.168.3.249">

如果有请求,则接受请求,并判断请求的内容是不是 “SHUTDOWN” 字符串。
如果是 “SHUTDOWN”,则跳出循环,并停止该 Socket 服务。然后在调用停止 Tomcat 服务方法。

Catalina 类 stop() 方法

停止服务代码如下 :

本人简书blog地址:http://www.jianshu.com/u/1f0067e24ff8    
点击这里快速进入简书

GIT地址:http://git.oschina.net/brucekankan/
点击这里快速进入GIT

Tomcat 怎么停止服务的?相关推荐

  1. linux查看tomcat 控制台,linux 下查看Tomcat的状态,以及开启停止服务命令

    1.首先进入你的tomcat 的bin目录下 cd /你的安装目录/tomcat/bin 查看服务启动情况 ps -ef|grep java 此条命令具体含义 ps:将某个进程显示出来 -A 显示所有 ...

  2. [转]使用批处理设置、启动和停止服务

    使用批处理设置.启动和停止服务                                                              Pashine     当我们的电脑安装了数据 ...

  3. oracle如何启动和停止服务,CentOS启动和停止服务详解

    CentOS启动和停止服务详解 服务简介 Linux 系统服务是在Linux启 动时自动加载, 服务的添加.删除.自动运行及状态 CAMS 在安装过程中会自动添加相关的服务,例如: service c ...

  4. tomcat启动停止在 Initializing Spring root WebApplicationContext,就不运行了

    启动项目的时候,项目一直运行到 Initializing Spring root WebApplicationContext,就停止不运行了,也不报错,开始真的很苦恼,后来把log日志的模式改为 de ...

  5. 将tomcat添加到服务中

    转载自:http://blog.csdn.net/zjd934784273/article/details/47701011(windows) :http://www.cnblogs.com/ilah ...

  6. 绿色版Tomcat 启动 + 停止 + 随系统自动启动 - - 博客频道 - CSDN.NET

    绿色版Tomcat 启动 + 停止 + 随系统自动启动 - - 博客频道 - CSDN.NET启动 绿色版 的 Tomcat 服务: 找到解压的 Tomcat 目录下, 例如: D:\ MyInsta ...

  7. centos终止linux程序,CentOS启动和停止服务详解

    CAMS 在安装过程中, 1. 添加服务 添加服务的步骤为: (1) 将该服务的脚本文件拷入/etc/rc.d/init.d 文件夹下,例如: service camsd stop 停止 camsd ...

  8. 使用批处理设置、启动和停止服务

    使用批处理设置.启动和停止服务                                                              Pashine     当我们的电脑安装了数据 ...

  9. [MacOSX]_[LaunchDaemons]_[Mac OS X 安装Tomcat开机启动服务的方法之一]

    场景: 1. Hudson作为持续集成软件,是需要在一个Java web容器部署的才能使用的,一般最常用的就是Tomcat. 2. Tomcat在Windows上部署安装Services很容易,使用自 ...

最新文章

  1. reverseString
  2. Opencv获取身份证号码区域
  3. rsa 加密 js php,security.js+RSA做出加密功能
  4. 从零开始学Node.js(八_删查)
  5. [Qt入门]消息对话框创建
  6. springboot——kaptcha
  7. python+OpenCV图像处理(二)图像像素的访问、通道的合并与分离
  8. oracle 图像包,完美简单详细,图形安装Oracle11g(Oracle Linux系统)
  9. linux全符号链接是什么,Linux 下的符号链接到底是个什么鬼?
  10. 数据结构--二叉树的二叉链表实现
  11. 打开Excle出现配置进度解决方法
  12. 软件需求规格说明书,概要设计说明书,详细设计说明书(文档)
  13. 亲密接触Redis-第三天(Redis的Load Balance)
  14. java实现读取文件返回字节数组
  15. epub书籍中关于.ncx的解析
  16. switch语句实现周一到周五输出weekday;周六周天weekend C语言
  17. 为什么cfg文件打开是乱码
  18. 关于stc,stm32,gd32单片机 isp 通过CAT1 ota升级的说明
  19. 25匹马,5条赛道,一匹马一个赛道,求决胜1,2,3名至少多少场。
  20. VISIO使用技巧汇总

热门文章

  1. 五十二、Java连接Mysql数据库
  2. 自然语言处理python进阶(一)
  3. 幸福指数测试软件,测试你和ta的幸福指数能不能爆表
  4. 杭州内推|阿里巴巴流量风控团队招收风控算法实习生
  5. 《失控玩家》爆火背后:什么才是拥抱人工智能的正确姿势?
  6. 每周一起读 × 招募 | WWW 2019:基于层次化强化学习的多源搜索展示优化
  7. 输入法注入源码_将注入进行到底:利用Mono注入C#游戏脚本
  8. 【JVM调优工具篇】使用JProfiler追踪GC Roots溯源
  9. 单例模式volatile
  10. 牛客题霸 NC20 数字字符串转化成IP地址