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服務上配置登錄賬號和密碼。

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