1. 程式人生 > >javaWeb專案部署在tomcat中,如何做到在瀏覽器中訪問url的時候省去專案名稱!

javaWeb專案部署在tomcat中,如何做到在瀏覽器中訪問url的時候省去專案名稱!

我們在開發完javaWeb專案後,是需要把專案釋出到伺服器中,這裡我們以Tomcat伺服器(我用的是Tomcat7),我用的是Eclispe,來舉例!

        我今天要說的一個問題就是,我們在瀏覽器中訪問javaWeb專案的時候,是以http://+ip地址+埠號+專案名稱 的方式來訪問我們的專案的(如我的埠號是8888,我的專案名稱叫xml,那麼在瀏覽器中訪問的時候就是 http:127.0.0.1:8888/xml),大家有沒有想過http:127.0.0.1:8888/xml這樣在瀏覽器中訪問專案,感覺是不是url特別的長,有沒有辦法能直接http:127.0.0.1:8888這樣訪問,這樣是不是就很方便了,我們不需要輸入專案名稱了,而是直接通過http://+ip地址+埠號(http:127.0.0.1:8888)這樣的方式直接訪問到我們的專案!

       接下來,就告訴大家怎麼做?

方式1:修改 tomcat目錄/conf/server.xml,修改server.xml檔案,如下圖


appBase屬性表示應用程式基本目錄,即存放應用程式的目錄

<Host>節點中增加一個節點,如下:

<Context docBase="xml" path="/ddd" reloadable="true" />

docBase屬性表示指定Web專案的檔案路徑,可以給絕對路徑,也可以給相對於<Host>的appBase屬性的相對路徑。

path屬性表示web專案的訪問路徑(即在瀏覽器中的url),我這裡寫的是path="/ddd",path屬性的值你可以隨便寫,寫的是什麼,那麼等下在瀏覽器中訪問的時候就是什麼!為了規範起見,

我個人建議把path的值設定成和專案名稱一樣,即path="/xml"

reloadable屬性表示如果這個屬性設為true,tomcat伺服器在執行狀態下會監視在WEB-INF/classesWEB-INF/lib目錄下class檔案的改動,如果監測到有class檔案被更新的,伺服器會自動重新載入Web專案。因為reloadable="true"比較耗費資源,所以reloadable="true"一般是用於開發階段,這樣比較方便除錯,如果專案正式上線了的話,那就改成reloadable="false",如果我沒記錯的話,該屬性的預設值為false

ok,接下來,我們啟動tomcat伺服器,然後在瀏覽器中輸入url,來訪問我的web專案。

在瀏覽器中輸入http://127.0.0.1:8888/ddd/


訪問專案成功了。

接下啦,我們要做的就是希望在瀏覽器中輸入http://127.0.0.1:8888直接訪問我的javaWeb專案,該如何做呢?其實很好辦,把<Context docBase="xml" path="/ddd" reloadable="true" />中的path屬性的值等於空就行了,改成

<Context docBase="xml" path="" reloadable="true" />

path為空,表示我的這個javaWeb專案為tomcat的預設專案,意思就是我在瀏覽器中輸入url地址http://127.0.0.1:8888/的時候,不會跳到tomcat的那隻貓的那個頁面了,而是直接跳到我的那個叫xml的javaWeb專案了。



以上是第1種方式,接下來是第2種方式!

方式2:tomcat目錄/conf/Catalina/localhost目錄下新建一個xml檔案,具體看下面如何操作!

我先tomcat目錄/conf目錄下的server.xml檔案中的<Context docBase="xml" path="" reloadable="true" />這句話註釋掉<!--<Context docBase="xml" path="" reloadable="true" />-->

然後再在tomcat目錄/conf/Catalina/localhost目錄下新建一個xml檔案,注意:我用的是Tomcat7,tomcat目錄/conf/目錄下原本就有Catalina/localhost這2個資料夾,如果你們的tomcat目錄/conf/目錄下沒有Catalina/localhost這2個資料夾,那你們就自己新建這2個資料夾。

好了,還是說怎麼新建一個xml檔案吧,看下圖:

我這個xml檔案的檔名是隨便取的名字,你們也可以先隨便取個名字!我這裡取的是ccc.xml


開啟ccc.xml,一下是ccc.xml檔案中的內容,就2句話

<?xml version="1.0" encoding="UTF-8"?>

<Context docBase="G:/Java/xml" path="/aaa" reloadable="true"/>


我看到有些文章說,xml檔名必須和path屬性值一致,我特意測試了一下,我把xml檔名取名為ccc.xml,而path="/aaa"然後我啟動tomcat,在瀏覽器中輸入http://127.0.0.1:8888/aaa 結果報404


這是什麼原因導致的呢?不是說path是url的訪問路徑嗎?

我們都知道tomcat啟動後,在tomcat目錄\work目錄下,會生成webapps目錄下的所有專案的專案名稱資料夾,如下圖:



tomcat目錄\work目錄下的資料夾可以看出,有個ccc的資料夾,所以我們可以猜想到,我們在瀏覽器應該輸入的url是http://127.0.0.1:8888/ccc/ 而不是http://127.0.0.1:8888/aaa 所以我們通過新建xml檔案的方式的話,瀏覽器訪問web專案是通過xml檔名來訪問的,而不是通過xml檔案中的path路徑來訪問。


瀏覽器位址列輸入http://127.0.0.1:8888/ccc/是可以訪問的。而且我們也可以看出,xml檔名可以和path屬性值不一致。但是為了規範起見,我個人還是建議xml檔名最好是和path屬性值保持一致,而且為了規範起見,最好path的值等於專案名稱。

接下來,我們改一下ccc.xml中的內容,改成如下

<?xml version="1.0" encoding="UTF-8"?>

<Context docBase="G:/Java/xml" path="" reloadable="true"/>

我們把path設定成空,即path=""

然後重啟tomcat

在瀏覽器中輸入http://127.0.0.1:8888/ 跳到了tomcat貓的頁面,說明path設定成空,即path=""不能直接跳到我這個名稱叫xml的web專案。


我再在瀏覽器中輸入瀏覽器中輸入http://127.0.0.1:8888/ccc 跳轉到了我這個名稱叫xml的web專案。由此可見,xml檔案這種方式跟xml中的path屬性無關,不管path屬性有值還是為空都無所謂,只跟xml的檔名有關!


接下來,就是要說怎麼通過xml檔案的方式做到在瀏覽器中只輸入http://127.0.0.1:8888就可以訪問我的javaWeb專案!

我們先把xml的檔名改成root.xml ,root.xml檔案中的內容還是如下

<?xml version="1.0" encoding="UTF-8"?>

<Context docBase="G:/Java/xml" path="" reloadable="true"/>

在瀏覽器中輸入url地址http://127.0.0.1:8888/ ,結果如下圖:還是跳轉到了tomcat那隻貓的頁面


看樣子還是不行啊,好,接下來,我們再把xml檔案的名字再改一下,改成ROOT.xml,但是xml檔案中的內容不變,檔案中的內容還是如下:

<?xml version="1.0" encoding="UTF-8"?>

<Context docBase="G:/Java/xml" path="" reloadable="true"/>


再在瀏覽器中輸入url地址http://127.0.0.1:8888/ ,結果如下圖:可以正常訪問到我的javaWeb專案,由此可以,檔名root.xml無效,必須是ROOT.xml才有效,必須是大寫的才有效!大家可以猜測一下,為什麼ROOT.xml檔名必須是大寫的?


之所以ROOT.xml檔名必須是大寫的,大家可以看下tomcat目錄/webapps目錄下有一個ROOT資料夾,該資料夾就是tomcat的根目錄,所以我們的xml檔名叫ROOT.xml才能覆蓋掉webapps目錄下有一個ROOT資料夾,到時候訪問http://127.0.0.1:8888/才能指向到ROOT.xml,而ROOT.xml檔案中的<Context docBase="G:/Java/xml" path="" reloadable="true"/>這句話,又可以跳轉到我的javaWeb專案。(注意:有的文章上說,為了保險起見,要刪掉tomcat伺服器中的webapps目錄下的ROOT資料夾,我自己測試了一下,不刪掉tomcat伺服器中的webapps目錄下的ROOT資料夾也是可以的)

好,我們再改一下ROOT.xml檔案中的內容,改成如下:

<Context docBase="G:/Java/xml" path="/aaa" reloadable="true"/>


再重啟一下tomcat

再在瀏覽器中輸入http://127.0.0.1:8888/ 結果還是可以正常訪問到我的javaWeb專案!


繼續論證了我上面的那句話,xml檔案這種方式跟xml中的path屬性無關,不管path屬性有值還是為空都無所謂,只跟xml的檔名有關!

OK,還有一點要特別注意一下,我之前的ROOT.xml檔案中的內容是如下:

<Context docBase="G:/apache-tomcat-7.0.53-windows-x64/apache-tomcat-7.0.53/webapps/xml" path="/aaa" reloadable="true"/>


我在瀏覽器中輸入url地址http://127.0.0.1:8888/ 結果卻是跳轉到tomcat那隻貓的介面,沒有跳轉到我的javaWeb專案頁面,我一直在檢查我的xml語法有沒有錯,我還一直檢查<Context>標籤的屬性有沒有寫錯,折騰了小一會兒,我終於想到了一點,估計是我的docBase="G:/apache-tomcat-7.0.53-windows-x64/apache-tomcat-7.0.53/webapps/xml"這裡寫的有問題,這是我得javaWeb專案的路徑,估計是我的這個路徑中帶了-中劃線和點.這種字元,導致沒辦法找到我的javaWeb專案的路徑所以我就把我的專案拷貝出來了,拷貝到了一個資料夾名字正常的資料夾下,G:\Java\xml 拷貝到了G盤的java資料夾下面,xml是我的專案名。

對ROOT.xml中的內容改成如下:

<Context docBase="G:/Java/xml" path="/aaa" reloadable="true"/>

如下圖:



再在瀏覽器中輸入url地址http://127.0.0.1:8888/ 結果是可以直接訪問到我的javaWeb專案

咱們大膽的猜想下,既然xml檔案這種方式跟<Context docBase="G:/Java/xml" path="/aaa" reloadable="true"/>這句話中的path屬性半毛錢關係都沒有,咱們乾脆就不要path屬性,直接去掉path屬性,看下什麼效果!


再次在瀏覽器位址列中輸入url地址http://127.0.0.1:8888/ 結果還是可以直接訪問到我的javaWeb專案


由此可見,xml檔案這種方式跟<Context docBase="G:/Java/xml" path="/aaa" reloadable="true"/>這句話中的path屬性確實是半毛錢關係都沒有

最後還有個小疑問,當tomcat目錄/conf/Catalina/localhost/ROOT.xml和tomcat目錄/conf/server.xml這2種方式並存的時候,換句話說,當ROOT.xml檔案中<Context docBase="G:/Java/xml" reloadable="true"/>這句話和server.xml檔案中<Context docBase="javascriptDemo" path="" reloadable="true"/>這句話同時存在時,我們在瀏覽器位址列中輸入http://127.0.0.1:8888/ 時,到底是會訪問javascriptDemo這個web專案還是會訪問xml這個web專案!

看下圖:server.xml檔案中docBase="javascriptDemo"我用的是相對路徑


ROOT.xml檔案中docBase="G:/Java/xml"我用的是絕對路徑