1. 程式人生 > >tomcat 虛擬目錄,檔案不再工程目錄 訪問方法

tomcat 虛擬目錄,檔案不再工程目錄 訪問方法

多臺tomcat主機(win2003平臺)做負載均衡時,希望共享虛擬目錄,沒有采用同步各主機虛擬目錄的方式,所以只能在檔案伺服器上開闢共享目錄,將tomcat的context docpath指向它。tomcat主機上將共享目錄對映為本地磁碟,配置如下
<Context docBase="V:\shareDir" path="/app"/>
如果是script方式(通過startup.bat),可正常啟動,以服務方式啟動tomcat時,總是報“Document base does not exist or is not a readable directory”,修改tomcat啟動服務賬戶為administrator,問題依舊,懷疑服務模式下無法訪問網路驅動器,將docbase指向共享目錄的UNC path即遠端訪問方式

<Context docBase="\\192.168.1.2\shareDir" path="/app"/>
新的錯誤出現了,報“java.io.IOException: 登入失敗: 未知的使用者名稱或錯誤密碼”,說明tomcat是可以通過unc path來配置context的docbase,不過當前的這個賬戶訪問受限,奇怪的是,在當前桌面環境中是可以順利訪問\\192.168.1.2\shareDir這一路徑的。聯想到這組伺服器都是在windows域控制環境下,以域使用者登入系統並將服務啟動賬戶改為域使用者domain\administrator,問題解決。
總結:
(1) tomcat可以通過unc path來配置context的docbase

(2)因為對映的網路驅動器,是在使用者的profile中配置, 服務模式下tomcat不能訪問到網路驅動器(猜想,可能可以通過修改profile來訪問網路驅動器)
(3)若遠端共享目錄只有域使用者才能訪問,在啟動tomcat服務時,必須指定以域使用者啟動服務
參考:
http://wiki.apache.org/tomcat/FAQ/Windows

http://blog.mattwoodward.com/accessing-a-network-drive-from-apache-and-tom?c=1

在tomcat安裝好後,只要把你的web專案copy到%TOMCAT_HOME%webapp下面就可以是使用啦!!其實還有種方法就是設定虛擬目錄,即把專案的目錄對映到tomcat中。這樣做即可以不用重複的部署,節約時間,而且給開發人員帶來方便。


方法如下:
1,找到%TOMCAT_HOME%/conf/server.xml,(即tomcat的安裝目錄下面相關的檔案)開啟此xml檔案,在 <host> </host>之間加入如下程式碼:

<Context path="" reloadable="true" debug="0" docBase="E:/workspace/test/bin" workDir="E:/workspace/test/work" crossContext="true" >
</Context>

<Context path="/test" docBase="E:/aaa" debug="0" reloadable="true"/>

    docBase是實際路徑,這裡一般寫一個絕對的磁碟路徑,當然也可以寫 相對路徑,相對路徑是相對於tomcat安裝目錄的webapps目錄的,通常設定虛擬目錄的目的是將tomcat的安裝和專案的儲存分開,所以這裡建議你使用磁碟絕對路徑,並且這個磁碟路徑不時在tomcat安裝目錄下。workDir是tomcat執行是對JSP檔案做編譯後的檔案,這個檔案最好也是分開。
path為虛擬路徑,訪問時的路徑,注意:一定要加“/”。值得注意的是:path可以為 "/"那麼訪問“IP:埠”就可以訪問到佈置的工程,如果為"/test",那麼必須得訪問“IP:埠/test”才能訪問到,我建議採用第一種方法。不然訪問每個工程都得有個虛擬路徑,看上去不舒服。可能你會想到如果我有多個工程怎麼辦?是不是一定得取幾個虛擬路徑,如果你用一個IP的話那是肯定的。但是如果你把機器多設定幾個IP,那麼就行了,每個工程佔用一個IP,這樣層次結構更加清晰。
debug建議設定為0,reloadable設定為true。


2,如果在測試中出現404的錯誤,如果前面配置沒有錯,可能就是在%TOMCAT_HOME%/conf/web.xml檔案中把虛擬路徑顯示目錄給禁止啦,此時可以在web.xml檔案中找到
<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>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
將listings的value改為true,然後重新啟動tomcat,在輸入url,測試成功!


3,如果專案開發完成,準備部署在伺服器上時,記住要把第三步中web.xml檔案中引數listings的值改為false,這樣可以避免把專案的部署路徑呈現給使用者!
具體如下:
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>

4、訪問多臺機器檔案問題:

檔案太多的時候必然需要跨目錄或跨盤,這個時候就需要用到虛擬目錄,但是Tomcat 不能直接跨Context 進行Forward。
例如:
用 Context 配置映射了虛擬目錄 data1, 目錄下有檔案 123.txt
如果要在 / 下直接 forward 到 "/data1/123.txt" 是不行的,會提示 404 找不到檔案。

那麼就需要靈活應用Tomcat 虛擬目錄對映:
在 D:/Tomcat/conf/Catalina/test 目錄下(test為Server.xml配置檔案中的域名) 增加 一個 xml 檔案,(test要建立),建立之後加上這個樣一個XML檔案(這裡就取名為data1.xml):
<Context docBase="//IP/data1" reloadable="false" crossContext="true" />
並且修改 Server.xml 中的 Context 允許 crossContext="true"。
那麼就可以在工程中訪問另外臺機器上的檔案(當然這個臺機器需要共享訪問的檔案)。例如:
<img src="/data1/001/002/003.png">,來顯示圖片。

問題又來了,就是許可權問題,共享的檔案不想給任何人訪問的話,就需要設定共享許可權,那麼就需要配置tomcat的許可權:
1、在共享的機器上設定tomcat帳戶和密碼,並加入共享許可權。
2、然後在放tomcat的伺服器上,設定相同的tomcat帳戶和密碼。
3、在tomcat服務上配置登入賬號和密碼。