首頁>技術>

1、 Apache Tomcat的下載和安裝

從Apache官網https://tomcat.apache.org/可以下載各種版本的tomcat軟體,下載的檔案格式可以是zip/tar.gz/exe形式的。

如下圖所示,在64位windows中使用tomcat,我們可以下載"64-bit Windows.zip",直接解壓縮就可以使用;或者下載"32-bit/64-bit Windows Service Installer",透過exe安裝tomcat後使用。

2、 tomcat的bin目錄

無論哪種形式獲得的tomcat伺服器軟體,在tomcat的主目錄下都有一個bin目錄,該bin目錄中存在tomcat伺服器啟動、停止和執行所必須的批處理/SHELL指令碼、exe可執行程式和一些jar包。

本文只介紹其中的startup.bat指令碼程式,該指令碼程式透過呼叫其他指令碼用於啟動tomcat伺服器。

3、 startup.bat指令碼的主要功能

該指令碼功能很簡單,主要實現兩方面的功能:找到catalina.bat指令碼,該指令碼用於實際啟動tomcat伺服器;組織引數傳遞給catalina.bat,呼叫call該指令碼執行。

4、 startup.bat指令碼詳細執行過程

下面文字刪掉了startup.bat指令碼檔案的英文註釋,只保留了指令碼中可以實際執行的語句,分析了每一條語句的功能。

另,分析的文字放在了rem註釋中。rem註釋中多數為漢字,作業系統解釋該指令碼時有時會和後續行的指令發生勾連,造成指令碼執行報錯。故,每個rem註釋語句的最後添加了一個英文形式的點號,這樣指令碼能正常執行。

另,下面的指令碼在tomcat9.0的startup.bat基礎上做了些許修改,確保該指令碼不僅僅可以完成tomcat的啟動操作,其他如stop操作等都可以正常執行。

------ startup.bat ----

@echo off

rem @echo off從本條命令開始關閉回顯,如果是echo off則是從下條命令開始關閉回顯.

rem 關閉回顯是執行bat檔案時,在cmd視窗看不到bat執行的命令,但可以看到輸出結果.

rem 打開回顯,則執行的命令和輸出在cmd視窗都能看到.

rem bat指令碼一般第一條指令就是這條.

setlocal

rem 設定區域性於setlocal和endlocal之間的變數,沒有endlocal就直接到bat檔案結尾處.

set "CURRENT_DIR=%cd%"

rem %cd%:指令碼執行的當前目錄,這裡的當前目錄有可能和指令碼實際所在目錄不一致.

rem %~dp0%:指令碼檔案所在目錄,注意,目錄的路徑為全路徑,並且帶結尾的\,前者不帶\.

rem 上面set語句將指令碼執行的當前目錄名賦給區域性變數CURRENT_DIR.

rem 如果CATALINA_HOME的內容不是空,即變數已經設定好了,則直接跳轉,不用再賦值了.

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

rem 否則取出變數CURRENT_DIR的值賦給CATALINA_HOME這個環境變數.

set "CATALINA_HOME=%CURRENT_DIR%"

rem 若CATALINA_HOME下面的bin目錄下存在catalina.bat檔案,則直接跳轉,不用再賦值.

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

rem 否則向前退一級目錄後將目錄名賦給CATALINA_HOME,並轉到該目錄下.

cd ..

set "CATALINA_HOME=%cd%"

cd "%CURRENT_DIR%"

:gotHome

rem 如果找到了catalina.bat,則轉到後面執行該批處理檔案.

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

rem 否則找不到catalina.bat檔案,在cmd視窗回顯下面的提示,跳轉到end,結束指令碼執行.

echo The CATALINA_HOME environment variable is not defined correctly

echo This environment variable is needed to run this program

goto end

:okHome

rem 將catalina.bat的全路徑名賦給變數EXECUTABLE

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

rem 如果EXECUTABLE中的全路徑名存在,則轉到執行程式的位置執行啟動程式.

if exist "%EXECUTABLE%" goto okExec

rem 否則如果全路徑名不存在,提示不能執行啟動程式,跳轉到最後end結束指令碼執行.

echo Cannot find "%EXECUTABLE%"

echo This file is needed to run this program

goto end

:okExec

rem 設定startup.bat的命令列引數,初始化引數為空.

set CMD_LINE_ARGS=

:setArgs

rem 將startup.bat檔案的命令列引數儲存在CM_LINE_ARGS中.

rem 如果第一個位置的命令列引數為空,則結束拼裝命令列引數.

if ""%1""=="""" goto doneSetArgs

rem 將第一個引數併入命令列引數變數中.

set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1

rem 命令列引數中引數左移一位,即將第二個引數移到第一個引數的位置.

rem 第三個引數移到第二個引數的位置等等.

shift

rem 跳轉到:setArgs處,完成當前引數拼裝,當引數為空時跳出setArgs迴圈.

goto setArgs

:doneSetArgs

rem 執行該startup.bat檔案可以有如下的一些引數.

rem C>startup.bat

rem C>startup.bat start

rem C>startup.bat stop

rem C>startup.bat debug

rem C>startup.bat start -security

rem C>startup.bat run

rem C>startup.bat run -security

rem 只運行了startup.bat檔案,沒有指定命令列引數,預設就當成啟動操作.

rem 拼裝start引數給批處理程式.

if "%CMD_LINE_ARGS%" == "" set CMD_LINE_ARGS=start

echo 呼叫catalina.bat的命令:%EXECUTABLE% %CMD_LINE_ARGS%

rem 呼叫catalina.bat批處理指令碼檔案

call "%EXECUTABLE%" %CMD_LINE_ARGS%

:end

11
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 如何在 C# 中使用 Buffer