亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 服務器 > Web服務器 > 正文

解析Tomcat的啟動腳本--startup.bat

2024-09-01 13:49:35
字體:
來源:轉載
供稿:網友

概述

我們通常使用 Tomcat 中的 startup.bat 來啟動 Tomcat. 但是這其中干了一些什么事呢?

大家都知道一個 Java 程序需要啟動的話, 肯定需要 main 方法, 那么這個 main 方法在哪呢?

Tomcat 腳本中又是配置了一些什么參數呢, 什么情況下 Tomcat 會啟動失敗呢?

帶著一些列的疑問我們來分析 Tomcat 的三個最重要的啟動腳本:

  • startup.bat
  • catalina.bat
  • setclasspath.bat

startup.bat 腳本

該腳本主要做了以下幾件事:

  • 設置 CATALINA_HOME 環境變量的值
  • 找到 catalina.bat 腳本
  • 調用 catalina.bat 腳本, 并把參數傳過去

貼出簡化版本的 startup.bat 腳本的內容

@echo offrem 執行這個命令之后, 增加或者改動的環境變量只限于匹配到 endlocal 命令或者到達文件末尾.setlocalrem 假設 CATALINA_HOME 環境變量沒有定義rem 取當前目錄的路徑值, 賦給 CURRENT_DIR 變量, 就是 ./apache-tomcat-x.x.xx/binset "CURRENT_DIR=%cd%"rem 如果 CATALINA_HOME 變量值不是 "" 的話, 調到 gotHome 標簽處if not "%CATALINA_HOME%" == "" goto gotHomerem 如果 CATALINA_HOME 是 "" 的話, 設置 CATALINA_HOME 變量值為 當前目錄的路徑值(./apache-tomcat-x.x.xx/bin)set "CATALINA_HOME=%CURRENT_DIR%"rem 判斷當前路徑下的是否有 bin/catalina.bat, 也就是 ./apache-tomcat-x.x.xx/bin/bin/catalina.batrem 如果存在的話, 直接調到 okHome 標簽處, 顯然是不存在的if exist "%CATALINA_HOME%/bin/catalina.bat" goto okHomerem 不存在的話, CATALINA_HOME 取上級目錄的值, 也就是(./apache-tomcat-x.x.xx/)cd ..set "CATALINA_HOME=%cd%"rem 進入 CURRENT_DIR(./apache-tomcat-x.x.xx/bin)cd "%CURRENT_DIR%":gotHomerem 通過上面的設置, CATALINA_HOME 的值已經是: ./apache-tomcat-x.x.xx/rem 所以整理是可以找到 catalina.bat 腳本的, 直接調到 okHome 標簽處if exist "%CATALINA_HOME%/bin/catalina.bat" goto okHomeecho The CATALINA_HOME environment variable is not defined correctlyecho This environment variable is needed to run this programgoto end:okHomerem 設置 EXECUTABLE 變量指向為 catalina.bat 腳本set "EXECUTABLE=%CATALINA_HOME%/bin/catalina.bat"rem 檢查目標可執行文件(catalina.bat)是否存在, 通常情況下是存在的, 直接調到 okExec 標簽處rem 如果不存在的話, 直接退出. 啟動 Tomcat 結束if exist "%EXECUTABLE%" goto okExececho Cannot find "%EXECUTABLE%"echo This file is needed to run this programgoto end:okExecrem 獲取剩余的沒有用 shift 取出來的命令行參數, 并保存它們在 CMD_LINE_ARGSset CMD_LINE_ARGS=:setArgsrem 如果第一個命令行參數是空的話, 跳到 doneSetArgs 標簽處rem "%1" : 表示執行命令之后的第一個參數if ""%1""=="""" goto doneSetArgsrem 第一個參數不是空的話, 拼接到 CMD_LINE_ARGS 變量set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1rem 這個命令可以自行百度shiftgoto setArgs:doneSetArgsrem 上面設置了 EXECUTABLE 變量的值是指向了 catalina.bat 腳本, 這個利用 call 命令執行調用, 并把參數傳進去rem 接下來, 咱們看 catalina.bat 腳本的內容rem 完整的命令: ./apache-tomcat-x.x.xx/bin/catalina.bat startcall "%EXECUTABLE%" start %CMD_LINE_ARGS%:end

要想理解腳本中的一些命令, 首先來了解一下常用的命令(我們用的 Window 版的)

  • rem : 該命令后的代碼不會被執行, 相當于注釋
  • @echo off : 關閉命令的顯示, 如果沒有設置, 執行了哪些命令都會顯示出來
  • echo : 輸出后面的內容
  • setlocal : 執行這個命令之后, 增加或者改動的環境變量的作用范圍只限于匹配到 endlocal 命令或者到達文件末尾.
  • set : 設置一個變量
  • :xxx : 定義一個標簽
  • goto : 跳轉到制定的標簽處
  • call : 執行命令

我們來一行行分析 startup.bat 腳本

set "CURRENT_DIR=%cd%"

%cd% : 表示文件所在的目錄的路徑

如果我們解壓的 Tomcat 所在的目錄為 D:/apache-tomcat-x.x.x/ . 因為 startup.bat 命令在 bin 目錄下, 所以此時 %cd% 表示的目錄是 D:/apache-tomcat-x.x.x/bin

if not "%CATALINA_HOME%" == "" goto gotHome

我們通常情況下不會配置 CATALINA_HOME 這個環境變量的, 所以這里不會調到 gotHome 標簽處.

set "CATALINA_HOME=%CURRENT_DIR%"

直接把當前目錄假設為 CATALINA_HOME 的值

if exist "%CATALINA_HOME%/bin/catalina.bat" goto okHome

然后通過固定的格式來判斷一下是否有 catalina.bat 腳本, 當然這里是肯定不會存在的, 因為 CATALINA_HOME = D:/apache-tomcat-x.x.x/bin

cd ..set "CATALINA_HOME=%cd%"

因為 Tomcat 的目錄格式是固定的, 所以這里直接進入上級目錄(cd ..), 然后設置 CATALINA_HOME 的值為上級目錄( D:/apache-tomcat-x.x.x ).

if exist "%CATALINA_HOME%/bin/catalina.bat" goto okHomeecho The CATALINA_HOME environment variable is not defined correctlyecho This environment variable is needed to run this programgoto end

繼續往下看, 這里又一次判斷了一下 catalina.bat 在這樣的目錄結構是是否能找到, 如果我們解壓完 Tomcat 后, 把 startup.bat 放在非 Tomcat 的 bin 目錄下之后, 這里是找不到的, 就直接 goto end, 退出 Tomcat 的啟動.

好了, 這里我們直接調到 okHome 標簽處.

:okHomeset "EXECUTABLE=%CATALINA_HOME%/bin/catalina.bat"

好了, 這里很簡單, 設置一個 EXECUTABLE 變量的值指向 catalina.bat 腳本.

if exist "%EXECUTABLE%" goto okExececho Cannot find "%EXECUTABLE%"echo This file is needed to run this programgoto end

又一次的檢查了一下這個腳本是否存在, 存在的話, 直接調到 okExec 標簽處, 可以執行了.

如果沒有通過檢查的話, 依舊退出啟動, 并打印錯誤信息.

:okExecset CMD_LINE_ARGS=:setArgsif ""%1""=="""" goto doneSetArgsset CMD_LINE_ARGS=%CMD_LINE_ARGS% %1shiftgoto setArgs

先設置了一個 CMD_LINE_ARGS 變量, 并且其值暫且為空

這里出現了一個 ""%1""=="""", 拆開看 就是判斷 "%1" 是否等于 "". 那么 "%1" 又是什么呢?

這是 window 批處理的一個語法, 表示的是執行命令之后的第一個參數, 對于這里, 我們并沒有傳遞什么參數, 所以這里的 "%1" 是 ""(空).

直接跳轉到 doneSetArgs 標簽處.

如果不是空的話, 就拼在后面唄.

這里這個 shift 命令意思就是移除一個參數, 舉個例子就知道了:

@echo offecho "%1"shiftecho "%1"

建一個 test.bat 批處理程序, 然后把上面代碼復制進去, 在 cmd 中執行并給它兩個參數

下面是執行結果, 這里大家可以把 @echo off 去掉再執行, 驗證一下這個命令的作用

PS D:/> ./test Hello World"Hello""World"PS D:/>

這樣, 大家應該可以理解了.

繼續分析

:doneSetArgscall "%EXECUTABLE%" start %CMD_LINE_ARGS%:end

在上面設置了 EXECUTABLE = %CATALINA_HOME%/bin/catalina.bat , 所以這里實際上是調用了 catalina.bat 這個腳本, 然后傳遞一個 start 參數給它.

如果我們在 cmd 中運行 startup.bat 并且后面跟著一些參數的話, 這里也一起傳遞過去了.

這里實際上就是執行了: %CATALINA_HOME%/bin/catalina.bat start

總結

這個腳本還是挺簡單的, 目的就是找到 catalina.bat 并調用它.

以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,下篇繼續介紹Tomcat相關知識--《解析Tomcat的啟動腳本--catalina.bat》,有興趣的朋友可以看下


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美激情奇米色| 最近更新的2019中文字幕| 欧美大片在线看免费观看| 国产欧美日韩专区发布| 国产精品老牛影院在线观看| 国产精品久久久久久久久影视| 色伦专区97中文字幕| 国产成人极品视频| 成人性生交xxxxx网站| 日韩电影大全免费观看2023年上| 欧美一级大片在线观看| 久久久久久网站| 亚洲爱爱爱爱爱| 午夜精品一区二区三区在线| 国产综合久久久久| 亚洲自拍偷拍色片视频| 91久久精品国产91久久性色| 91精品在线影院| 亚洲一区二区中文字幕| 亚洲国产欧美一区二区三区久久| 亚洲欧美激情另类校园| 色综合伊人色综合网站| 色无极亚洲影院| 亚洲精品自拍第一页| 国产日韩中文字幕| 成人精品网站在线观看| 九九久久久久久久久激情| 日韩欧美在线国产| 国产999精品久久久影片官网| 亚洲国产精彩中文乱码av在线播放| 欧美刺激性大交免费视频| 一个人看的www欧美| 欧美成人精品一区| 日本精品免费观看| 久久精品国产2020观看福利| 欧美—级高清免费播放| 日韩高清a**址| 国产丝袜一区二区三区免费视频| 久久午夜a级毛片| 精品久久久一区二区| 91精品国产成人| 成人免费视频97| 91高清视频在线免费观看| 久久6免费高清热精品| 欧美日韩国产在线播放| 欧美肥婆姓交大片| 国产日韩精品在线| 欧美激情亚洲自拍| 亚洲成色www8888| 日本久久久久亚洲中字幕| 欧美区二区三区| 欧美日韩国产二区| 国产欧美亚洲精品| 国产精品三级网站| 一区二区三区无码高清视频| 亚洲最大的成人网| 日本不卡免费高清视频| 欧美在线观看视频| 国产欧美久久一区二区| 久久精品福利视频| 91国产中文字幕| 国产精品日韩欧美综合| 日本久久久久亚洲中字幕| 97色在线观看免费视频| 国内精品美女av在线播放| 亚洲国产精品va在线| 激情成人在线视频| 国产香蕉97碰碰久久人人| 久久亚洲精品小早川怜子66| 日韩在线精品一区| 一本色道久久88亚洲综合88| 国产精品久久久久久久美男| 丝袜情趣国产精品| 欧美一级在线亚洲天堂| 97超碰蝌蚪网人人做人人爽| 欧美成人免费在线视频| 日韩久久精品电影| 国产成人激情小视频| 美女av一区二区| 这里只有精品视频在线| 91网站在线看| 久久久久久综合网天天| 国产视频亚洲视频| 91社影院在线观看| 啊v视频在线一区二区三区| 成人免费视频在线观看超级碰| 亚洲最大在线视频| 狠狠综合久久av一区二区小说| 成人妇女淫片aaaa视频| 国产精品高清在线观看| 日韩中文综合网| 国产精品wwww| 丁香五六月婷婷久久激情| 国产亚洲精品久久久久久| 成人福利视频在线观看| 亚洲人成网7777777国产| 成人伊人精品色xxxx视频| 国产精品一久久香蕉国产线看观看| 欧美成人午夜激情| 欧美日本中文字幕| 中文字幕精品www乱入免费视频| 国产成人免费av| 91精品久久久久久久久久另类| 欧美日韩国产一中文字不卡| 97色在线播放视频| 韩国国内大量揄拍精品视频| 久久躁狠狠躁夜夜爽| 国产激情视频一区| 国产精品都在这里| 国产精品久久激情| 国产一区二区三区在线观看视频| 亚洲成人中文字幕| 精品国产乱码久久久久久婷婷| 91成人福利在线| 九九综合九九综合| 欧洲亚洲免费视频| 韩国三级电影久久久久久| 国产精品亚洲视频在线观看| 国产成人激情视频| 色爱av美腿丝袜综合粉嫩av| 亚洲a在线观看| 久久亚洲精品一区二区| 一本色道久久88精品综合| 中文字幕欧美精品日韩中文字幕| 91精品视频在线看| 久久久成人的性感天堂| 久久香蕉国产线看观看网| 成人妇女免费播放久久久| 国产精品久久一区| 亚洲色图欧美制服丝袜另类第一页| 亚洲人成网站色ww在线| 91免费视频国产| 久久人人看视频| 91精品国产91久久久久久吃药| 久久亚洲欧美日韩精品专区| xxxxx成人.com| 欧美高清视频在线播放| 欧美国产激情18| 久久亚洲精品小早川怜子66| 亚洲一区精品电影| 亚洲а∨天堂久久精品9966| 韩日欧美一区二区| 51久久精品夜色国产麻豆| 97在线看免费观看视频在线观看| 亚洲欧美日韩一区二区三区在线| 亚洲高清免费观看高清完整版| 日产日韩在线亚洲欧美| 日本精品免费一区二区三区| 国产精品高清在线| 久久久午夜视频| 亚洲欧美另类人妖| 免费成人高清视频| 日韩欧美在线观看| 亚洲欧美日韩直播| 欧美—级高清免费播放| 国产精品69av| 亚洲网站在线观看| 久久韩剧网电视剧| 亚洲成人av在线播放| 国产xxx69麻豆国语对白| 日韩美女在线观看| 国产亚洲精品美女久久久久| 日本不卡免费高清视频| 91禁外国网站|