Tomcat 怎么停止服务的?
通过分析 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方法中调用了两个方法如下:
- await() 方法监听停止服务请求的方法
- 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 怎么停止服务的?相关推荐
- linux查看tomcat 控制台,linux 下查看Tomcat的状态,以及开启停止服务命令
1.首先进入你的tomcat 的bin目录下 cd /你的安装目录/tomcat/bin 查看服务启动情况 ps -ef|grep java 此条命令具体含义 ps:将某个进程显示出来 -A 显示所有 ...
- [转]使用批处理设置、启动和停止服务
使用批处理设置.启动和停止服务 Pashine 当我们的电脑安装了数据 ...
- oracle如何启动和停止服务,CentOS启动和停止服务详解
CentOS启动和停止服务详解 服务简介 Linux 系统服务是在Linux启 动时自动加载, 服务的添加.删除.自动运行及状态 CAMS 在安装过程中会自动添加相关的服务,例如: service c ...
- tomcat启动停止在 Initializing Spring root WebApplicationContext,就不运行了
启动项目的时候,项目一直运行到 Initializing Spring root WebApplicationContext,就停止不运行了,也不报错,开始真的很苦恼,后来把log日志的模式改为 de ...
- 将tomcat添加到服务中
转载自:http://blog.csdn.net/zjd934784273/article/details/47701011(windows) :http://www.cnblogs.com/ilah ...
- 绿色版Tomcat 启动 + 停止 + 随系统自动启动 - - 博客频道 - CSDN.NET
绿色版Tomcat 启动 + 停止 + 随系统自动启动 - - 博客频道 - CSDN.NET启动 绿色版 的 Tomcat 服务: 找到解压的 Tomcat 目录下, 例如: D:\ MyInsta ...
- centos终止linux程序,CentOS启动和停止服务详解
CAMS 在安装过程中, 1. 添加服务 添加服务的步骤为: (1) 将该服务的脚本文件拷入/etc/rc.d/init.d 文件夹下,例如: service camsd stop 停止 camsd ...
- 使用批处理设置、启动和停止服务
使用批处理设置.启动和停止服务 Pashine 当我们的电脑安装了数据 ...
- [MacOSX]_[LaunchDaemons]_[Mac OS X 安装Tomcat开机启动服务的方法之一]
场景: 1. Hudson作为持续集成软件,是需要在一个Java web容器部署的才能使用的,一般最常用的就是Tomcat. 2. Tomcat在Windows上部署安装Services很容易,使用自 ...
最新文章
- reverseString
- Opencv获取身份证号码区域
- rsa 加密 js php,security.js+RSA做出加密功能
- 从零开始学Node.js(八_删查)
- [Qt入门]消息对话框创建
- springboot——kaptcha
- python+OpenCV图像处理(二)图像像素的访问、通道的合并与分离
- oracle 图像包,完美简单详细,图形安装Oracle11g(Oracle Linux系统)
- linux全符号链接是什么,Linux 下的符号链接到底是个什么鬼?
- 数据结构--二叉树的二叉链表实现
- 打开Excle出现配置进度解决方法
- 软件需求规格说明书,概要设计说明书,详细设计说明书(文档)
- 亲密接触Redis-第三天(Redis的Load Balance)
- java实现读取文件返回字节数组
- epub书籍中关于.ncx的解析
- switch语句实现周一到周五输出weekday;周六周天weekend C语言
- 为什么cfg文件打开是乱码
- 关于stc,stm32,gd32单片机 isp 通过CAT1 ota升级的说明
- 25匹马,5条赛道,一匹马一个赛道,求决胜1,2,3名至少多少场。
- VISIO使用技巧汇总