日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Tomcat 怎么停止服务的?

發布時間:2024/9/30 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 怎么停止服务的?的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。