深入理解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,這樣就將該目錄下的所有文件都暴露給了用戶,這樣也給系統的使用帶來了一定的風險。所以,選擇使用虛擬目錄一定要慎重。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章