Tomcat詳細用法學習(二)


  本篇接上一篇《Tomcat詳細用法學習(一)》,主要講解服務器的虛擬目錄映射的幾種方式。

  先來看幾個概念:

  web應用的概念:一個web應用包含了許多我們做好的web資源,里面或許包括了多個靜態web資源和動態web資源,如html、css、js文件,jsp文件,Java程序,jar包和配置文件等等,如我在Tomcat的【webapps】目錄下的自定義目錄【fjdingsdapp】中包含了一個“1.html”文件,那么這個在【fjdingsdapp】整個可以運行文件中的所有資源可以稱為是我開發的一個“web應用程序”,簡稱“web應用”,而單單【fjdingsdapp】這個包含所有我開發的web資源稱為我的“web應用所在目錄”。

  而我們將web應用開發好之后,若想供外界訪問,那么久需要把 “web應用所在目錄” 交給服務器管理,這個過程稱為“虛擬目錄的映射”。

服務器的虛擬目錄映射有三種方式:

 

  第一種(不推薦):

  雖然這種方式不推薦,但是可以用來設置自己開發的web應用的首頁,無需再鍵入虛擬目錄名和資源名作為URL路徑。

  在server.xml文件中找到<Host>標簽元素,在其下使用<Context>標簽,注意這是在操作XML文件,XML文件是區分大小寫的,一個<Context>標簽就代表一個web應用。

  假設我的Tomcat服務器在【F】盤,其【webapps】目錄中沒有我的web應用,而我的web應用放在【D】盤的【myWebApp】目錄中,該目錄下有一個“1.html文件”,要想在瀏覽器中能訪問到我的這個web應用,我在Tomcat的server.xml文件中找到<Host>標簽,添加<Context>標簽並配置屬性(注意這是無結束標簽,要注意結束方式 “/>”),如下示例:

<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
        
    <Context path="" docBase="D:\myWebApp" />

</Host>

path屬性:虛擬目錄的名稱,也就是對外訪問路徑,本地硬盤中不一定有這個目錄,但是如果path屬性有值,在瀏覽器地址欄必須輸入。這里為缺省值。

docBase屬性:web應用所在目錄,這個是硬盤中必須存在的,在這個目錄中放的是我們的web資源。

  每次配置server.xml文件后,必須重啟Tomcat服務器

  由於我們設置了<Context>的“path”屬性為缺省值,因此在地址和端口之后只需要輸入資源名即可:

  

  如果path屬性有值,比如path=“123” (隨便寫的)

<Context path="123" docBase="D:\myWebApp" />

  那么瀏覽器在輸入時必須有這個路徑才能訪問到對應的文件:

  

  

  結尾:一個<Context>標簽即代表一個web應用,因此在<Host>標簽下可以有多個web應用,但是這些<Context>中的path屬性只能有一個是缺省值。<Context>元素在配置文件中除用於映射虛擬目錄之外,還可以用於為web應用配置一些資源,例如配置web應用使用的數據庫連接池,javamail session等(這些配置以后會介紹到)。

  之所以不推薦這種方法,這是因為在Tomcat服務器的說明上已經表明這種方法需要經常性的修改server.xml文件,而每次修改都需要重啟服務器

  

  看到如下的說明:

  ================================================

  第二種:

  同樣在Tomcat對於<Context>標簽的說明中,有這么一種方式:

  這是另一種定義<Context>標簽的方式,無需在<Host>標簽下定義,這種方式的好處是不需要每次都要重啟Tomcat,那么這種方式應該怎么做呢?

  首先,我們需要自定義一個XML文件,而這個XML文件的文件名(除去".xml"的部分)將會作為今后瀏覽器輸入的路徑名,類似於這個文件名是虛擬目錄名稱(即對外訪問路徑),我們需要在這個自定義的XML文件中添加<Context>元素,這種方式就不需要添加“path”屬性了,因為文件名已經代替了。

  其次,在上圖中有這么一段路徑:$CATALINA_BASE/conf/[enginename]/[hostname]/ directory  ,這段路徑中的“CATALINA_BASE”在《Tomcat免安裝版的環境變量配置以及Eclipse下的Tomcat配置和測試》一文中我已經提及,我設的正是Tomcat的主目錄,而“conf”正好也是Tomcat下的配置文件目錄名,那么 “[enginename]” 和 “[hostname]” 對應的目錄是什么呢?我們打開 server.xml  文件,看到里面有的<Engine>和<Host>這兩個標簽(<Host>就是第一種方式中所說的那個)

<Engine defaultHost="localhost" name="Catalina">

    ...(此處省略其他內容)
    
    <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
     </Host>
</Engine>

可以看到這兩個標簽中正好都有name屬性,<Engine>元素的name屬性值為“Catalina”,<Host>元素的name屬性值為“localhost”,正好是【conf】目錄下的【Catalina】目錄,和【Catalina】目錄下的【localhost】目錄:

  

  在【localhost】目錄中,就是我們要放置的自定義XML文件。

  現在,我的web應用所在目錄為【D】盤中的【myWebApp】目錄中,而這回不需要去server.xml文件中配置路徑,我在Tomcat目錄下的【conf】-->【Catalina】-->【localhost】下創建一個“rr.xml”文件:

  在D盤下放置我的web應用

  在指定的Tomcat路徑中放置我的XML配置文件,將會映射到我的web應用

  在“rr.xml”文件中的代碼就一行:

<Context docBase="D:\myWebApp" />

 

  之前說過,自定義的XML文件名是作為對外訪問路徑,所以要想在瀏覽器中訪問我的web應用,就該這么輸入,能看到:

  

  當然這還沒完,繼續開着服務器不要關,我們在在Tomcat目錄下的【conf】-->【Catalina】-->【localhost】下再創建一個"dsd.xml"文件,內容同“rr.xml”文件,將瀏覽器的路徑修改,可以看到:

  

  是的,這種方式能避免經常重啟Tomcat服務器。

  由自定義的XML文件可以通過文件名來增加多級訪問路徑,以“#”相隔,例如:

  

 那么瀏覽器地址欄應該這么輸入:

  

   當然,第一種方式還有缺省的類型,那么第二種方式是否也能這樣呢,那就需要定義一個“ROOT.xml”文件了,對,文件名就叫“ROOT”,必須全部大寫,在“ROOT.xml”中的內容依然還是為

<Context docBase="D:\myWebApp" />

那么瀏覽器就可以省略虛擬目錄名(對外訪問路徑),如下:

  

<Context>的最后:

  <Context>標簽有一個“reloadable”屬性,能運行Tomcat自動加載更新后的web應用,尤其是在web應用中有新的Java程序更新時,但是這個屬性是要避免使用的,通常web應用都是比較大的,如果設置了這個屬性,Tomcat服務器容易卡死,因此不建議使用。

=============================================================

 

  第三種:

  讓Tomcat自動映射,Tomcat會自動管理其【webapps】目錄下的所有web應用,並把這些web應用所在目錄映射成虛擬目錄。因此我們只要講自己開發好的web應用放置在Tomcat的【webapps】目錄下即可。而對外訪問的路徑名稱就是“web應用所在目錄”的名稱。

  如我在【webapps】目錄下創建一個自定義目錄【mywebapp】,里面含有一個“3.html”文件,

   ---->

  那么在瀏覽器中輸入地址:

  

  通過這種方式,也無需重啟服務器。

  那么通過這種方式可以指定web應用所在目錄的默認頁面,在 目錄【mywebapp】 下定義一個“index.html”。文件名一定是“index”才行,其他文件名會查找不到,這時在瀏覽器中只需要鍵入地址和web應用所在目錄(已作為虛擬目錄)即可,無需鍵入對應資源名(不需要再多加“index.html”):

  

 這種配置首頁的方式原理其實是和Tomcat的【conf】目錄中的“web.xml”文件中配置有關,至於原理將在下一篇Tomcat的學習中指出說明。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM