最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解析Tomcat的啟動(dòng)腳本--startup.bat

 更新時(shí)間:2016年12月13日 10:23:21   作者:削個(gè)椰子皮  
本文主要對(duì)Tomcat的三個(gè)最重要的啟動(dòng)腳本之一--startup.bat腳本做了詳細(xì)分析,具有很好的參考價(jià)值,需要的朋友可以看下

概述

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

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

Tomcat 腳本中又是配置了一些什么參數(shù)呢, 什么情況下 Tomcat 會(huì)啟動(dòng)失敗呢?

帶著一些列的疑問我們來分析 Tomcat 的三個(gè)最重要的啟動(dòng)腳本:

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

startup.bat 腳本

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

  • 設(shè)置 CATALINA_HOME 環(huán)境變量的值
  • 找到 catalina.bat 腳本
  • 調(diào)用 catalina.bat 腳本, 并把參數(shù)傳過去

貼出簡(jiǎn)化版本的 startup.bat 腳本的內(nèi)容

@echo off
rem 執(zhí)行這個(gè)命令之后, 增加或者改動(dòng)的環(huán)境變量只限于匹配到 endlocal 命令或者到達(dá)文件末尾.
setlocal
rem 假設(shè) CATALINA_HOME 環(huán)境變量沒有定義
rem 取當(dāng)前目錄的路徑值, 賦給 CURRENT_DIR 變量, 就是 ./apache-tomcat-x.x.xx/bin
set "CURRENT_DIR=%cd%"
rem 如果 CATALINA_HOME 變量值不是 "" 的話, 調(diào)到 gotHome 標(biāo)簽處
if not "%CATALINA_HOME%" == "" goto gotHome
rem 如果 CATALINA_HOME 是 "" 的話, 設(shè)置 CATALINA_HOME 變量值為 當(dāng)前目錄的路徑值(./apache-tomcat-x.x.xx/bin)
set "CATALINA_HOME=%CURRENT_DIR%"
rem 判斷當(dāng)前路徑下的是否有 bin\catalina.bat, 也就是 ./apache-tomcat-x.x.xx/bin/bin/catalina.bat
rem 如果存在的話, 直接調(diào)到 okHome 標(biāo)簽處, 顯然是不存在的
if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome
rem 不存在的話, CATALINA_HOME 取上級(jí)目錄的值, 也就是(./apache-tomcat-x.x.xx/)
cd ..
set "CATALINA_HOME=%cd%"
rem 進(jìn)入 CURRENT_DIR(./apache-tomcat-x.x.xx/bin)
cd "%CURRENT_DIR%"
:gotHome
rem 通過上面的設(shè)置, CATALINA_HOME 的值已經(jīng)是: ./apache-tomcat-x.x.xx/
rem 所以整理是可以找到 catalina.bat 腳本的, 直接調(diào)到 okHome 標(biāo)簽處
if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome
echo The CATALINA_HOME environment variable is not defined correctly
echo This environment variable is needed to run this program
goto end
:okHome
rem 設(shè)置 EXECUTABLE 變量指向?yàn)?catalina.bat 腳本
set "EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat"
rem 檢查目標(biāo)可執(zhí)行文件(catalina.bat)是否存在, 通常情況下是存在的, 直接調(diào)到 okExec 標(biāo)簽處
rem 如果不存在的話, 直接退出. 啟動(dòng) Tomcat 結(jié)束
if exist "%EXECUTABLE%" goto okExec
echo Cannot find "%EXECUTABLE%"
echo This file is needed to run this program
goto end
:okExec
rem 獲取剩余的沒有用 shift 取出來的命令行參數(shù), 并保存它們?cè)?CMD_LINE_ARGS
set CMD_LINE_ARGS=
:setArgs
rem 如果第一個(gè)命令行參數(shù)是空的話, 跳到 doneSetArgs 標(biāo)簽處
rem "%1" : 表示執(zhí)行命令之后的第一個(gè)參數(shù)
if ""%1""=="""" goto doneSetArgs
rem 第一個(gè)參數(shù)不是空的話, 拼接到 CMD_LINE_ARGS 變量
set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1
rem 這個(gè)命令可以自行百度
shift
goto setArgs
:doneSetArgs
rem 上面設(shè)置了 EXECUTABLE 變量的值是指向了 catalina.bat 腳本, 這個(gè)利用 call 命令執(zhí)行調(diào)用, 并把參數(shù)傳進(jìn)去
rem 接下來, 咱們看 catalina.bat 腳本的內(nèi)容
rem 完整的命令: ./apache-tomcat-x.x.xx/bin/catalina.bat start
call "%EXECUTABLE%" start %CMD_LINE_ARGS%
:end

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

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

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

set "CURRENT_DIR=%cd%"

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

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

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

我們通常情況下不會(huì)配置 CATALINA_HOME 這個(gè)環(huán)境變量的, 所以這里不會(huì)調(diào)到 gotHome 標(biāo)簽處.

set "CATALINA_HOME=%CURRENT_DIR%"

直接把當(dāng)前目錄假設(shè)為 CATALINA_HOME 的值

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

然后通過固定的格式來判斷一下是否有 catalina.bat 腳本, 當(dāng)然這里是肯定不會(huì)存在的, 因?yàn)?CATALINA_HOME = D:/apache-tomcat-x.x.x/bin

cd ..
set "CATALINA_HOME=%cd%"

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

if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome
echo The CATALINA_HOME environment variable is not defined correctly
echo This environment variable is needed to run this program
goto end

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

好了, 這里我們直接調(diào)到 okHome 標(biāo)簽處.

:okHome
set "EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat"

好了, 這里很簡(jiǎn)單, 設(shè)置一個(gè) EXECUTABLE 變量的值指向 catalina.bat 腳本.

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

又一次的檢查了一下這個(gè)腳本是否存在, 存在的話, 直接調(diào)到 okExec 標(biāo)簽處, 可以執(zhí)行了.

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

:okExec
set CMD_LINE_ARGS=
:setArgs
if ""%1""=="""" goto doneSetArgs
set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1
shift
goto setArgs

先設(shè)置了一個(gè) CMD_LINE_ARGS 變量, 并且其值暫且為空

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

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

直接跳轉(zhuǎn)到 doneSetArgs 標(biāo)簽處.

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

這里這個(gè) shift 命令意思就是移除一個(gè)參數(shù), 舉個(gè)例子就知道了:

@echo off
echo "%1"
shift
echo "%1"

建一個(gè) test.bat 批處理程序, 然后把上面代碼復(fù)制進(jìn)去, 在 cmd 中執(zhí)行并給它兩個(gè)參數(shù)

下面是執(zhí)行結(jié)果, 這里大家可以把 @echo off 去掉再執(zhí)行, 驗(yàn)證一下這個(gè)命令的作用

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

這樣, 大家應(yīng)該可以理解了.

繼續(xù)分析

:doneSetArgs
call "%EXECUTABLE%" start %CMD_LINE_ARGS%
:end

在上面設(shè)置了 EXECUTABLE = %CATALINA_HOME%\bin\catalina.bat , 所以這里實(shí)際上是調(diào)用了 catalina.bat 這個(gè)腳本, 然后傳遞一個(gè) start 參數(shù)給它.

如果我們?cè)?cmd 中運(yùn)行 startup.bat 并且后面跟著一些參數(shù)的話, 這里也一起傳遞過去了.

這里實(shí)際上就是執(zhí)行了: %CATALINA_HOME%\bin\catalina.bat start

總結(jié)

這個(gè)腳本還是挺簡(jiǎn)單的, 目的就是找到 catalina.bat 并調(diào)用它.

以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,下篇繼續(xù)介紹Tomcat相關(guān)知識(shí)--《解析Tomcat的啟動(dòng)腳本--catalina.bat》,有興趣的朋友可以看下

相關(guān)文章

  • Tomcat安裝與配置Native APR模式的教程

    Tomcat安裝與配置Native APR模式的教程

    APR是Apache HTTP服務(wù)器的支持庫,提供了一組映射到下層操作系統(tǒng)的API。通過 tomcat-native 庫,使tomcat運(yùn)行時(shí)通過APR更多的調(diào)用本地API,達(dá)到提升性能的目的。下面這篇文章詳細(xì)介紹了Tomcat安裝與配置Native APR模式的教程,需要的朋友可以參考借鑒,一起來看看吧。
    2017-02-02
  • 一次tomcat源碼啟動(dòng)控制臺(tái)中文亂碼的調(diào)試過程記錄

    一次tomcat源碼啟動(dòng)控制臺(tái)中文亂碼的調(diào)試過程記錄

    平時(shí)在使用tomcat做一些服務(wù)的時(shí)候經(jīng)常遇到各種亂碼問題,下面這篇文章主要給大家介紹了一次tomcat源碼啟動(dòng)控制臺(tái)中文亂碼的調(diào)試過程,需要的朋友可以參考下
    2021-06-06
  • 詳解從源碼分析tomcat如何調(diào)用Servlet的初始化

    詳解從源碼分析tomcat如何調(diào)用Servlet的初始化

    這篇文章主要介紹了詳解從源碼分析tomcat如何調(diào)用Servlet的初始化,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • 深入理解Tomcat的響應(yīng)緩沖區(qū)大小

    深入理解Tomcat的響應(yīng)緩沖區(qū)大小

    在Tomcat中,響應(yīng)緩沖區(qū)的大小是一個(gè)重要的配置參數(shù),合理設(shè)置緩沖區(qū)大小可以優(yōu)化數(shù)據(jù)傳輸效率,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-11-11
  • tomcat如何修改默認(rèn)訪問項(xiàng)目名稱和項(xiàng)目發(fā)布路徑

    tomcat如何修改默認(rèn)訪問項(xiàng)目名稱和項(xiàng)目發(fā)布路徑

    這篇文章主要介紹了tomcat如何修改默認(rèn)訪問項(xiàng)目名稱和項(xiàng)目發(fā)布路徑問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • 關(guān)于tomcat下啟動(dòng)solr遇到的問題及解決

    關(guān)于tomcat下啟動(dòng)solr遇到的問題及解決

    這篇文章主要介紹了關(guān)于tomcat下啟動(dòng)solr遇到的問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Tomcat 請(qǐng)求的資源[/XXX/]不可用問題的解決方法

    Tomcat 請(qǐng)求的資源[/XXX/]不可用問題的解決方法

    遇到Tomcat提示資源不可用時(shí),通常是因?yàn)檎?qǐng)求的文件路徑錯(cuò)誤或文件未被正確部署,本文就來介紹一下Tomcat 請(qǐng)求的資源[/XXX/]不可用問題的解決方法,感興趣的可以了解一下
    2024-09-09
  • 使用jenkins將項(xiàng)目部署到另一臺(tái)主機(jī)的過程

    使用jenkins將項(xiàng)目部署到另一臺(tái)主機(jī)的過程

    這篇文章主要介紹了使用jenkins將項(xiàng)目部署到另一臺(tái)主機(jī)的詳細(xì)過程,這這里手動(dòng)部署需要關(guān)閉防火墻,確保git命令存在,拉取部署的項(xiàng)目包,具體實(shí)例代碼跟隨小編一起看看吧
    2021-10-10
  • Tomcat啟動(dòng)springboot項(xiàng)目war包報(bào)錯(cuò):?jiǎn)?dòng)子級(jí)時(shí)出錯(cuò)的問題

    Tomcat啟動(dòng)springboot項(xiàng)目war包報(bào)錯(cuò):?jiǎn)?dòng)子級(jí)時(shí)出錯(cuò)的問題

    這篇文章主要介紹了Tomcat啟動(dòng)springboot項(xiàng)目war包報(bào)錯(cuò):?jiǎn)?dòng)子級(jí)時(shí)出錯(cuò)的問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • 詳述 tomcat 中的 server.xml 配置文件示例

    詳述 tomcat 中的 server.xml 配置文件示例

    本文將通過實(shí)例,介紹server.xml中各個(gè)組件的配置,并詳細(xì)說明 Tomcat 各個(gè)核心組件的作用以及各個(gè)組件之間的相互關(guān)系。對(duì)tomcat server.xml 配置文件相關(guān)知識(shí)感興趣的朋友一起看看吧
    2017-08-08

最新評(píng)論

伊春市| 吴川市| 新巴尔虎右旗| 台江县| 秦安县| 宜州市| 新建县| 宁晋县| 舟曲县| 安塞县| 泽普县| 正镶白旗| 明光市| 叶城县| 通山县| 西乡县| 苍山县| 孟津县| 彭阳县| 平江县| 博爱县| 白河县| 永泰县| 永昌县| 清流县| 石嘴山市| 内乡县| 汉阴县| 左云县| 兖州市| 米泉市| 开阳县| 白水县| 宣化县| 阿巴嘎旗| 监利县| 和平县| 定远县| 宝丰县| 会泽县| 铜川市|