亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

查看tomcat啟動(dòng)文件都干點(diǎn)啥

系統(tǒng) 2131 0

  以下所寫的都是基于Windows 操作系統(tǒng),tomcat7.0版本。一直在使用tomcat但是老實(shí)說對于tomcat本身并沒有一個(gè)系統(tǒng)的掌握,今天饒有興致的隨便看了看,做了一點(diǎn)筆記,寫一點(diǎn)心得,我本人比較喜歡從表面出發(fā),從使用出發(fā),然后再深入到它的本質(zhì)問題上。

  在windows操作系統(tǒng)中,我們運(yùn)行tomcat只需要執(zhí)行startup.bat腳本就好,簡單的很,但是startup.bat這個(gè)腳本做些什么,我是真的不知道的,所以今天我就說說startup.bat這個(gè)腳本都有什么內(nèi)幕在里面。首先我們看一下startup.bat的內(nèi)容是什么:

      
         1
      
      
        @echo
      
      
        off
      
      
         2
      
      
        rem
      
      
         Licensed to the Apache Software Foundation (ASF) under one or more
      
      
         3
      
      
        rem
      
      
         contributor license agreements.  See the NOTICE file distributed with
      
      
         4
      
      
        rem
      
      
         this work for additional information regarding copyright ownership.
      
      
         5
      
      
        rem
      
      
         The ASF licenses this file to You under the Apache License, Version 2.0
      
      
         6
      
      
        rem
      
      
         (the "License"); you may not use this file except in compliance with
      
      
         7
      
      
        rem
      
      
         the License.  You may obtain a copy of the License at
      
      
         8
      
      
        rem


      
      
         9
      
      
        rem
      
      
             http://www.apache.org/licenses/LICENSE-2.0
      
      
        10
      
      
        rem


      
      
        11
      
      
        rem
      
      
         Unless required by applicable law or agreed to in writing, software
      
      
        12
      
      
        rem
      
      
         distributed under the License is distributed on an "AS IS" BASIS,
      
      
        13
      
      
        rem
      
      
         WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      
      
        14
      
      
        rem
      
      
         See the License for the specific language governing permissions and
      
      
        15
      
      
        rem
      
      
         limitations under the License.
      
      
        16
      
      
        17
      
      
        if
      
       "%OS%" == "Windows_NT" 
      
        setlocal
      
      
        18
      
      
        rem
      
      
         ---------------------------------------------------------------------------
      
      
        19
      
      
        rem
      
      
         Start script for the CATALINA Server
      
      
        20
      
      
        rem


      
      
        21
      
      
        rem
      
      
         $Id: startup.bat 895392 2010-01-03 14:02:31Z kkolinko $
      
      
        22
      
      
        rem
      
      
         ---------------------------------------------------------------------------
      
      
        23
      
      
        24
      
      
        rem
      
      
         Guess CATALINA_HOME if not defined
      
      
        25
      
      
        set
      
       "CURRENT_DIR=%cd%"


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


      
      
        27
      
      
        set
      
       "CATALINA_HOME=%CURRENT_DIR%"


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


      
      
        29
      
      
        cd
      
       ..


      
        30
      
      
        set
      
       "CATALINA_HOME=%cd%"


      
        31
      
      
        cd
      
       "%CURRENT_DIR%"


      
        32
      
      
        :gotHome
      
      
        33
      
      
        if
      
      
        exist
      
       "%CATALINA_HOME%\bin\catalina.bat" 
      
        goto
      
      
         okHome


      
      
        34
      
      
        echo
      
       The CATALINA_HOME environment variable is 
      
        not
      
      
         defined correctly


      
      
        35
      
      
        echo
      
       This environment variable is needed to 
      
        run
      
      
         this program


      
      
        36
      
      
        goto
      
      
        end
      
      
        37
      
      
        :okHome
      
      
        38
      
      
        39
      
      
        set
      
       "EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat"


      
        40
      
      
        41
      
      
        rem
      
      
         Check that target executable exists
      
      
        42
      
      
        if
      
      
        exist
      
       "%EXECUTABLE%" 
      
        goto
      
      
         okExec


      
      
        43
      
      
        echo
      
       Cannot 
      
        find
      
       "%EXECUTABLE%"


      
        44
      
      
        echo
      
       This file is needed to 
      
        run
      
      
         this program


      
      
        45
      
      
        goto
      
      
        end
      
      
        46
      
      
        :okExec
      
      
        47
      
      
        48
      
      
        rem
      
      
         Get remaining unshifted command line arguments and save them in the
      
      
        49
      
      
        set
      
       CMD_LINE_ARGS=


      
        50
      
      
        :setArgs
      
      
        51
      
      
        if
      
       ""
      
        %1
      
      ""=="""" 
      
        goto
      
      
         doneSetArgs


      
      
        52
      
      
        set
      
       CMD_LINE_ARGS=%CMD_LINE_ARGS% 
      
        %1
      
      
        53
      
      
        shift
      
      
        54
      
      
        goto
      
      
         setArgs


      
      
        55
      
      
        :doneSetArgs
      
      
        56
      
      
        57
      
      
        call
      
       "%EXECUTABLE%" 
      
        start
      
      
         %CMD_LINE_ARGS%


      
      
        58
      
      
        59
      
      
        :end
      
    

  如果熟悉語法,那么對這個(gè)腳本的內(nèi)容了解起來就很容易,不幸的是,我不熟悉,所以我只能一點(diǎn)一點(diǎn)的看了,從頭開始:

第1行:echo off是一個(gè)批處理命令,作用就是關(guān)閉輸出所執(zhí)行的批處理操作的所執(zhí)行的命令,前面加上@就是連echo off這條命令也不顯示,看一下下面這個(gè)例子,我在D盤創(chuàng)建一個(gè)腳本文件test.bat,文件中的內(nèi)容如下:

      
        1
      
       C
      
        :


      
      
        2
      
      
        dir
      
    

我運(yùn)行此腳本,執(zhí)行結(jié)果如下:

查看tomcat啟動(dòng)文件都干點(diǎn)啥

當(dāng)在test.bat腳本上加上echo off以后,

      
        1
      
      
        echo
      
      
        off
      
      
        2
      
      
        c:


      
      
        3
      
      
        dir
      
    

?

執(zhí)行結(jié)果 如下:

查看tomcat啟動(dòng)文件都干點(diǎn)啥

有沒有發(fā)現(xiàn),其中的c:和dir命令都已經(jīng)不現(xiàn)實(shí)了,知識(shí)現(xiàn)實(shí)了一個(gè)echo off命令,如果加上@echo off那么連echo off命令都不現(xiàn)實(shí):

      
        @echo
      
      
        off
      
      
        

c:


      
      
        dir
      
    

執(zhí)行結(jié)果如下:

查看tomcat啟動(dòng)文件都干點(diǎn)啥

發(fā)現(xiàn)所有執(zhí)行的命令都沒有現(xiàn)實(shí),知識(shí)輸出了命令的執(zhí)行結(jié)果。

下面看第17行:

      
        if
      
       "%OS%" == "Windows_NT" 
      
        setlocal
      
    

可以判斷這是一個(gè)判斷語句,如果%OS% == "Windows_NT" 那么執(zhí)行setlocal,這里面有兩個(gè)不好理解的東西,%OS%為何物,setlocal又是做了什么事情, %% 是從操作系統(tǒng)的環(huán)境變量中讀取信息,我們可以看一下,在操作系統(tǒng)中,應(yīng)該有個(gè)OS環(huán)境變量,

查看tomcat啟動(dòng)文件都干點(diǎn)啥

下面我們來嘗試一下,同樣在test.bat中加入測試內(nèi)容:

      
        1
      
      
        @echo
      
      
        off
      
      
        2
      
      
        echo
      
      
         %OS% 


      
      
        3
      
      
        echo
      
       %
      
        Path
      
      %
    

? ? ? 查看執(zhí)行結(jié)果:

查看tomcat啟動(dòng)文件都干點(diǎn)啥

? ? 不出意料果然是在讀取環(huán)境變量中的內(nèi)容,但是當(dāng)我把環(huán)境變量中的內(nèi)容作修改以后呢?

查看tomcat啟動(dòng)文件都干點(diǎn)啥

查看執(zhí)行結(jié)果:

? ? ? ?發(fā)現(xiàn)此時(shí)%OS%已經(jīng)改變。下來需要看看setlocal這個(gè)命令做了些什么操作,下面看一下在microsoft網(wǎng)站上對于setlocal的講解,setlocal:

      Starts localization of environment variables 
      
        in
      
       a batch file. Localization continues until a matching endlocal command 
      
        is
      
       encountered or the end of the batch file 
      
        is
      
       reached.
    

? ? ? 在批處理文件中環(huán)境變量的本地化操作。意思就是在setlocal命令執(zhí)行以后,對于環(huán)境變量所做的修改只是對于本批處理文件有影響,這個(gè)影響直到對應(yīng)的endlocal命令,或者批處理文件結(jié)尾處時(shí)消除。舉例子證明一下:

      
        1
      
      
        @echo
      
      
        off
      
      
        2
      
      
        setlocal
      
      
        3
      
      
        path
      
      =g:\programs\superapp;%
      
        path
      
      
        % 


      
      
        4
      
      
        echo
      
       %
      
        Path
      
      
        %


      
      
        5
      
      
        endlocal
      
      
        6
      
      
        echo
      
       %
      
        Path
      
      %
    

? ? ? 如果按照上面的說法,兩次輸出的%Path%應(yīng)該不一樣,第一次比第二次多輸出g:\programs\superapp,下面看結(jié)果

查看tomcat啟動(dòng)文件都干點(diǎn)啥

? ? ? 所以if "%OS%" == "Windows_NT" setlocal的意思就是如果在環(huán)境變量中%OS%設(shè)置的是Windows_NT,那么就調(diào)用setlocal方法在本startup.bat這個(gè)批處理文件中,設(shè)置本地的環(huán)境變量。

? ?下面看第25行

      
        set
      
       "CURRENT_DIR=%cd%"
    

這個(gè)理解起來可能很簡單,問題就是%cd%這個(gè)具體是什么值,只需要嘗試一下:

      
        @echo
      
      
        off
      
      
        set
      
       "CURRENT_DIR=%cd%"


      
        echo
      
       %CURRENT_DIR%
    

其實(shí)很簡單,%cd%變量就是current_dir的簡寫,就是批處理文件運(yùn)行的當(dāng)前目錄,由于startup.bat都運(yùn)行在tomcat的bin目錄下,所有我也將test.bat放到該目錄下,在我的環(huán)境中,這個(gè)地址為,D:\apache-tomcat-7.0.52-src\bin,那么執(zhí)行結(jié)果為:

下面看25行

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

如果你習(xí)慣在操作系統(tǒng)中設(shè)置%CATALINA_HOME%這個(gè)環(huán)境變量,那么此刻執(zhí)行到此處的時(shí)候,就會(huì)跳轉(zhuǎn)到:gotHome節(jié)點(diǎn)下的語句中,

      
        @echo
      
      
        off
      
      
        if
      
      
        not
      
       "%CATALINA_HOME%" == "" 
      
        goto
      
      
         gotHome


      
      
        echo
      
      
         aaa


      
      
        :gotHome
      
      
        echo
      
       "gotHome"
    

輸出結(jié)果:

但是我平時(shí)真的沒有設(shè)置%CATALINA_HOME%這個(gè)環(huán)境變量的習(xí)慣,所以此處我將剛才添加的%CATALINA_HOME%環(huán)境變量去掉,所以在執(zhí)行

if not "%CATALINA_HOME%" == ""這條語句的時(shí)候,返回的結(jié)果為false,所以順序執(zhí)行第26行:

下面看26行的內(nèi)容:

      
        set
      
       "CATALINA_HOME=%CURRENT_DIR%"
    

上面已經(jīng)知道了%CURRENT_DIR%這個(gè)變量時(shí)在tomcat\bin目錄,在我的環(huán)境下應(yīng)該就是D:\apache-tomcat-7.0.52-src\bin,如何要是設(shè)置%CATALINA_HOME%這個(gè)變量的話,%CATALINA_HOME%的值應(yīng)該是tomcat所在的目錄。在我的環(huán)境下應(yīng)該就是D:\apache-tomcat-7.0.52-src。

接下來查看27行的內(nèi)容:

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

這個(gè)意思就是如果存在%CATALINA_HOME%\bin\catalina.bat這個(gè)批處理文件,那么就跳轉(zhuǎn)到:okHome節(jié)點(diǎn)下面的代碼中,如果這個(gè)文件不存在那么就順序執(zhí)行28行的代碼,但是一般情況下,這個(gè)文件都是存在的,我也想不出什么情況下(排除人為刪除),這個(gè)文件不存在,但是還是看一下28-30行的代碼:

      
        cd
      
       ..


      
        set
      
       "CATALINA_HOME=%cd%"


      
        cd
      
       "%CURRENT_DIR%"
    

這個(gè)意思很明了,以我的環(huán)境為例,如果不存在D:\apache-tomcat-7.0.52-src\bin\catalina.bat文件,那么就到D:\apache-tomcat-7.0.52-src這個(gè)目錄下,此時(shí)的%cd%的值應(yīng)該為D:\apache-tomcat-7.0.52-src,設(shè)置CATALINA_HOME變量為D:\apache-tomcat-7.0.52-src,因?yàn)榍懊嬖O(shè)置過%CURRENT_DIR%的值為D:\apache-tomcat-7.0.52-src\bin,所以在此進(jìn)到D:\apache-tomcat-7.0.52-src\bin這個(gè)目錄下。

下面是gotHome節(jié)點(diǎn)了,看一下gotHome節(jié)點(diǎn)的命令:

      
        :gotHome
      
      
        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
      
    

從上面的程序看來,如果設(shè)置了%CATALINA_HOME%變量,那么直接跳轉(zhuǎn)到執(zhí)行g(shù)otHome節(jié)點(diǎn),如果沒有定義這個(gè)變量的話就順序執(zhí)行到這來,gotHome主要做的工作就是判斷%CATALINA_HOME%\bin\catalina.bat這個(gè)文件是不是存在,如果存在,那么到:okHome節(jié)點(diǎn),如果不存在,那么輸出錯(cuò)誤信息,然后直接跳轉(zhuǎn)到文件的末尾處,結(jié)束本次程序。下面請看cataline.bat文件存在的情況下,執(zhí)行的:okHome節(jié)點(diǎn)的信息:

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




      
        rem
      
      
         Check that target executable exists
      
      
        if
      
      
        exist
      
       "%EXECUTABLE%" 
      
        goto
      
      
         okExec


      
      
        echo
      
       Cannot 
      
        find
      
       "%EXECUTABLE%"


      
        echo
      
       This file is needed to 
      
        run
      
      
         this program


      
      
        goto
      
      
        end
      
    

:ok節(jié)點(diǎn)的操作同樣只是做了一下校驗(yàn),把%CATALINA_HOME%\bin\catalina.bat賦值給變量EXECUTABLE,然后再做一次EXECUTABLE變量的校驗(yàn),同樣,如果校驗(yàn)成功的話,執(zhí)行:okExec節(jié)點(diǎn)下的操作,如果不存在,輸出相關(guān)的錯(cuò)誤信息,然后直接跳轉(zhuǎn)到文件的末尾處,結(jié)束本次執(zhí)行。接下來的部分,不能分開說明,所以把45-53行拿出來一起說明:

      
        :okExec
      
      
        rem
      
      
         Get remaining unshifted command line arguments and save them in the
      
      
        set
      
       CMD_LINE_ARGS=


      
        :setArgs
      
      
        if
      
       ""
      
        %1
      
      ""=="""" 
      
        goto
      
      
         doneSetArgs


      
      
        set
      
       CMD_LINE_ARGS=%CMD_LINE_ARGS% 
      
        %1
      
      
        shift
      
      
        goto
      
      
         setArgs


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




      
      
        :end
      
    

? ? ? 將:setArgs節(jié)點(diǎn)下的返回結(jié)果賦值給CMD_LINE_ARGS變量。在:setArgs的第一條命令,如果%1也就是第一個(gè)參數(shù)為空,那么直接跳轉(zhuǎn)到:doneSetArgs節(jié)點(diǎn),執(zhí)行catalina.bat文件,此時(shí)應(yīng)該沒有傳遞參數(shù)。如果存在參數(shù)的話,那么就循環(huán)所有的參數(shù),將所有的參數(shù)鏈接在一起,賦值給CMD_LINE_ARGS變量,然后執(zhí)行catalina.bat文件,此時(shí)應(yīng)該有傳遞參數(shù)。?

?

? ? ? ?到此關(guān)于tomcat在windows操作系統(tǒng)下的的啟動(dòng)文件startup.bat的分析就結(jié)束了,其實(shí)startup.bat文件的作用就是找到catalina.bat文件,然后把參數(shù)傳遞給它,至于catalina.bat文件都做了什么操作,等下一章在分析把。

?

?

?

查看tomcat啟動(dòng)文件都干點(diǎn)啥


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 久久草在线 | 欧美大吊视频 | 狠色狠狠色狠狠狠色综合久久 | 欧美日韩亚洲国产 | 一区二区不卡在线观看 | 午夜爱爱网 | 国产精品久久久亚洲 | 亚洲欧美一区二区三区综合 | 毛片免费观看成人 | 成人a毛片一级 | 色偷偷免费视频 | 国产一区日韩二区欧美三 | 免费国产成人综合 | 欧美人交性视频在线香蕉 | 在线cao| 久久精品成人一区二区三区 | 亚洲精品一级一区二区三区 | 亚洲欧美二区三区久本道 | 久久亚洲热 | 精品国产一区二区三区19 | 久久视热这只是精品222 | 久久99热久久精品动漫 | 夜色成人免费观看 | 日韩国产成人资源精品视频 | 色综合久久88一加勒比 | 全部免费特黄特色大片中国 | 涩爱tv| 国产成+人+综合+亚洲不卡 | 精品久久免费视频 | 国产精品大片天天看片 | 亚洲精品成人网 | 99在线热播 | 男人的天堂欧美精品色偷偷 | 亚洲四房 | 亚洲美女亚洲精品久久久久 | 久久婷婷色一区二区三区 | 亚洲精品一区二区乱码在线观看 | 国产亚洲日本 | 亚洲毛片网站 | 久久麻豆精品 | 久久精品国产精品亚洲综合 |