1. 程式人生 > >深入理解Tomcat虛擬目錄

深入理解Tomcat虛擬目錄

    我們知道,Web網站中的內容(包括網頁,圖片,音訊檔案等)一般都存放在App的目錄下。但隨著網站內容的不斷豐富,使用者需要把不同層次的內容組織成網站的子目錄。我們通常的做法是在網站主目錄下新建子目錄,並把相關的內容放置到對應的目錄。此外,還有另外一種方法,就是建立虛擬目錄。虛擬目錄可以是磁碟上有許可權操作的任意路徑(將虛擬路徑設定為readOnly是絕對不行的),也可以是網路中其他計算機的目錄。          相對而言,建立子目錄的方式更安全高效。但為什麼還要有虛擬目錄呢?這是因為虛擬目錄解決了Web檔案必須放在Web根目錄下的難題。一方面,這樣大大增加Web工程的儲存空間。另一方面,也為多個不同的工程共享同一份檔案提供了保障。比如,當我們多個網站都需要訪問同一份檔案時,我們只需將該虛擬路徑指向改檔案的地址即可,這樣就避免了同一份檔案多次拷貝的問題。     在Tomcat7版本下,配置虛擬路徑修改以下兩個檔案:     1.server.xml     開啟Tomcat目錄下的/conf/server.xml檔案,在Host之前加入下面紅色部分的內容。
<Host name="localhost" appBase="webapps"             unpackWARs="true" autoDeploy="true">  <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"     prefix="localhost_access_log." suffix=".txt"     pattern="%h %l %u %t &quot;%r&quot; %s %b" />  <Context path="/appName/filePath" docBase="/opt/filePath" reloadable="true" debug="0"/>
</Host>
    path : 工程名稱+檔案路徑,當訪問path目錄下的檔案時,實則訪問docBase目錄下的檔案。     docBase : 檔案的真實路徑。注意這裡如果有檔案長傳,則將上傳的檔案路徑設定為docBase,而不是path。 2. web.xml     開啟Tomcat目錄下的/conf/web.xml,將下面紅色部分listings的屬性設定為True。
<servlet>         <servlet-name>default</servlet-name>         <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>         <init-param>             <param-name>debug</param-name>             <param-value>0</param-value>         </init-param>         <init-param>             <param-name>listings</param-name>             <param-value>true
</param-value>         </init-param>         <load-on-startup>1</load-on-startup>     </servlet>
    不可否認,虛擬目錄的使用為我們的開發和部署帶來了極大的便利,但是由於配置虛擬目錄必須要將listings屬性設定為True,這樣就將該目錄下的所有檔案都暴露給了使用者,這樣也給系統的使用帶來了一定的風險。所以,選擇使用虛擬目錄一定要慎重。