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