Java應用伺服器之tomcat基礎配置(一)

1874發表於2020-07-16

  前文我們聊到了java相關重要元件和它們之間的關係以及jdk、tomcat部署回顧請參考https://www.cnblogs.com/qiuhom-1874/p/13302938.html;今天我們來聊一聊tomcat的配置使用相關話題;

  一、tomcat配置相關檔案簡介

  1、server.xml

  server.xml的配置檔案格式大致如下

<Server>
    <Service>
        <connector/>
        <connector/>
         ...
        <Engine>
            <Host>
                <Context/>
                <Context/>
                ...
            </Host>
            <Host>
            ...
            </Host>
            ...
        </Engine>
    </Service>
</Server>

  提示:server.xml是tomcat的主配置檔案,主要定義server屬性相關引數,而server中核心的元件有service(服務)、connector(聯結器)、engine(引擎)、host(虛擬主機)、context(上下文);這些元件它們都有一定聯絡,其中一個service中可以包含一個或多個聯結器(connector),其次就是引擎(engine),引擎是tomcat執行jsp程式碼的核心元件,通常情況一個聯結器只能對應一個引擎,而一個引擎可以對應多個聯結器,可以包含多個host,host我們可以理解為httpd中的基於名稱的虛擬主機;一個host中可以一個或多個context;context的主要作用是定義location與檔案系統路徑的對應關係和訪問許可權相關配置;

  對於tomcat配置檔案server.xml中的元件,其實都是Java的類實現,這些元件大體可分為如下型別:

  頂級元件:Server

  服務類元件:Service

  聯結器元件:http, https, ajp(apache jserv protocol)

  容器類:Engine, Host, Context

  被巢狀類:valve, logger, realm, loader, manager, ...

  叢集類元件:listener, cluster, ...

  2、web.xml:每個webapp只有部署後才能被訪問,它的部署方式通常由web.xml進行定義,其存放位置為WEB-INF/目錄中;通常情況每個webapp專案中都會有WEB-INF或META-INF目錄,該目錄就是用於存放該專案部署相關配置(web.xml或者context.xml),如果對應專案裡沒有這個目錄,那麼tomcat中的web.xml就提供預設部署相關配置;

  3、context.xml:webapp的專用配置檔案,其存放位置為WEB-INF/目錄中;該檔案和web.xml檔案類似,如果對應webapp專案中沒有WEB-INF或META-INF目錄,那麼tomcat中的content.xml就是為其提供預設配置;

  4、tomcat-users.xml:使用者認證的賬號和密碼檔案;

  5、catalina.policy:當使用-security選項啟動tomcat時,用於為tomcat設定安全策略;

  6、catalina.properties:Java屬性的定義檔案,用於設定類載入器路徑,以及一些與JVM調優相關引數;

  7、logging.properties:日誌系統相關的配置;

  二、webapp的組織結構

    /:webapps的根目錄

    index.jsp:主頁尾本,類似fpm中的index.php;

    WEB-INF/:當前webapp的私有資源路徑;通常用於儲存當前webapp的web.xml和context.xml配置檔案;所謂私有資源路徑就是在對應url上無法進行訪問的資源(不能以uri的方式被其他人訪問到);

    META-INF/:此目錄作用類似WEB-INF/;

    class/:儲存當前webapp所提供的類檔案;

    lib/:儲存類檔案目錄,當前webapp所提供的類被打包成jar格式的類檔案;

  webapp歸檔格式:

    .war這類檔案是webapp的歸檔檔案,裡面包含了整個webapp的所有檔案,類,我們可以理解.war格式的檔案就是整個webapp所有檔案的壓縮歸檔檔案,通常我們直接把該檔案放在webapps目錄下然後啟動tomcat,這個包會自動展開;通常.war包用於部署單元來使用;

    .jar這類檔案通常是把類和類相關的資源封裝壓縮在一起的歸檔檔案;通常用於部署和封裝庫、元件和外掛程式;

    .rar這類檔案主要是資源介面卡類打包檔案的格式;

    .ear這類檔案是企業級webapp打包檔案,和.war不同的是,ear是針對EJB容器,.war針對web容器;ear包含war;

  三、部署webapp的相關術語:

    1、deploy(部署):所謂部署就是把webapp的原始檔放置於目標目錄(網頁程式檔案存放目錄,類似httpd中的documentroot指定的目錄),然後配置tomcat伺服器能夠基於web.xml和context.xml檔案中定義的路徑來訪問webapp;然後將其特有的類和依賴的類通過類載入器(class loader)裝載至jvm的這一過程;部署第方式有兩種,一種是自動部署(auto deploy),自動部署就是我們直接把webapp檔案放置對應目錄下就可以實現訪問,不需要人為手動的去配置部署;另外一種就是手動部署,手動部署又可以分為冷部署和熱部署;所謂冷部署就是把webapp原始碼檔案放到指定位置,然後啟動tomcat這種方式叫冷部署;熱部署指的是在不停止tomcat的前提下進行部署的方式;常用的部署工具有:manager、ant指令碼和tcd(tomcat client deployer)等;

    2、undeploy(反部署):所謂反部署就是部署的逆向操作,停止webapp並從tomcat例項上解除安裝webapp的操作叫反部署;

    3、start:啟動處於停止狀態的webapp;

    4、stop:停止webapp,使其不再像客戶提供服務,但是類依然在jvm上;

    5、redeploy:重新部署;

  示例:手動提供一測試類應用,並冷部署到tomcat上

  1、建立目錄結構

  提示:在webapps目錄下建立專案目錄;這裡說一下webapps目錄,這個目錄預設配置是支援熱部署的,其中ROOT目錄是主站點原始碼檔案存放地,存放在ROOT目錄下的檔案在訪問時可以不用加任何uri就可以訪問得到,其他目錄需要加對應目錄名為uri才可以被訪問;

  2、建立index.jsp檔案

  提示:index.jsp檔案中就做了一件事,列印hello world這句話;

  3、更改目錄許可權

  提示:新建的檔案我們需要保證tomcat使用者有可以正常的讀取即可,對於目錄tomcat使用者可以進入即可;

  4、啟動tomcat

  提示:預設情況tomcat所在webapps目錄下的子目錄是可以通過訪問對應目錄名稱訪問到的,我們把網頁尾本檔案放到webapps目錄下的子目錄下,不停tomcat也是可以訪問到,原因是tomcat預設就支援熱部署;如下配置檔案所示

  驗證:用瀏覽器訪問我們剛才部署testwebapp,看看是否能夠被訪問到?

  提示:可以看到我們訪問對應子目錄的名稱是可以正常訪問到對應目錄下的index.jsp檔案;

  四、利用tomcat的兩個管理應用來部署webapp

  1、給manager應用配置賬號

  提示:tomcat-user.xml這個配置檔案主要是定義使用者相關配置;以上配置表示啟動manager-gui角色,並新增tomcat使用者擁有manager-gui角色的所有許可權;這需要注意一點username password roles 這幾個變數之間是用空格做分割的,不要忘記每個變數賦值後,用空格分割,最後一個不需要有空格;

  重啟tomcat服務

  網頁登陸manager app

  提示:登入到manager app後,我們就可以看到tomcat上所有的webapp,我們可以在後面進行操作,停止啟動,和過載以及解除安裝對應webapp;

  測試:停止/test 看看對應webapp是否還可以訪問?

  提示:可以看到當我們把對應webapp停止後,對應webapp就不能夠訪問了,訪問它會告訴我們該資源未找到,404錯誤;

  啟動/test webapp,看看是否馬上就可以訪問了呢?

  2、給host-manager配置賬號

  提示:啟動admin-gui角色,並把admin-gui角色擁有的許可權附加到tomcat使用者上;

  重啟tomcat

  登入主站的host manager

  提示:可以看到登入host-manager 應用中,我們可以看到有一個預設的host是localhost,和一些伺服器相關資訊;

  新增一個host

  提示:app base路徑需要在伺服器上有該路徑,並且需要我們把對應的原始碼檔案放進去;還需要注意對應目錄tomcat使用者可以讀和進入到該目錄的許可權;

  在windows上配置解析www.test.com 為192.168.0.22

  測試:訪問我們剛才新增的host,看看是否能夠訪問到?

  提示:tomcat監聽在8080,所以我們訪問新增的虛擬主機也需要把埠帶上;從上面的訪問結果看,它提示我們404網頁檔案未找到;其原因是我們在/tmp/下的/test/目錄沒有ROOT目錄,預設情況訪問虛擬主機,就相當於訪問這個虛擬主機的主站,所謂主站就是訪問的rul上沒有rui,如上圖所示;這時tomcat它會去對應目錄下找ROOT目錄裡的主頁檔案(index.jsp);

  提示:修改了/tmp/test/下的目錄結構後,現在在訪問看看?

  提示:更改了/tmp/test/目錄結構後,直接訪問就可以訪問到對應的頁面了,這裡需要注意一點,如果我們剛才新增虛擬主機時,沒有勾選支援自動部署,我們還需要去部署才可以訪問;

  登入server status 應用

  提示:用剛才的tomcat使用者就可以直接登入server status 應用,因為剛才配置的tomcat使用者是 admin-gui角色和manager-gui角色,這兩個角色都有登入訪問server status的許可權;

  提示:server status 應用主要是用於檢視伺服器狀態相關的資訊;該頁面主要記錄了tomcat版本,jvm版本和對應伺服器的版本資訊以及伺服器主機名,ip地址;jvm記憶體池使用相關資訊;ajp聯結器相關連結資訊和http聯結器相關資訊;通過檢視狀態頁面,我們可以瞭解到伺服器和tomcat的情況,從而進行優化和調整;

相關文章