eclipse部署項目到webapps下,如何不帶contextPath來訪問

    自從用回了eclipse,從昨晚就在想這麼一個事,你看啊,我們比如有個項目應用名字
叫app,部署到外網使用,要訪問的話基本上是不帶項目名的(也就是contextPath名,地
址如http://221.221.158.46/index.do),因爲在外網的tomcat的server.xml,一般
配置了Context,並且path爲空,使得項目文件目錄和tomcat目錄分別在兩個地方(如根目
錄/www下),但是在本地環境情況下,這個事情還有點繞,還拿app這個作例子。

    我建了一個app的Dynamic Web Project,出於以前myeclipse的習慣,我把WebContent改成了WebRoot,然後用它提供的servers配置tomcat,雙擊Servers標籤中新建好的tomcat項,進入配置界面,其中Server Locations選擇了Use Tomcat installation(takes control of Tomcat installation),下面的deploy path可以填任意你想部署的地方,如f:\target,這樣就與webapps分開了,完成後就可以右擊tomcat項,選擇add/remove將我們的app項目扔到那邊去,之後點擊publish完成本機部署。
   
    觀察f:\target目錄,發現裏面有app目錄和ROOT目錄,至於那個ROOT是個打醬油的先不用管它,既然IDE敢把app放到了另外的目錄裏,說明一定改了我們tomcat的server.xml文件,現在內容多了一條Context元素,內容爲
<Context docBase="F:\target\app" path="/app" reloadable="true" source="org.eclipse.jst.jee.server:app"/>

    我們現在可以通過http://localhost:8080/app來訪問了,但這不是我想要的,我想用http://localhost:8080直接訪問app,所以path應該爲空,手動改它肯定是不行的,因爲IDE已經直接連到了這個文件,每次發佈它都會把path修改回去。
   
    在myeclipse的時候,是可以通過項目設置,讓它直接把app目錄裏面的內容,直接部署到webapps/ROOT下面,這樣就可以不帶ContextPath來訪問,但是這樣本身就很奇怪,我們看不到三條腿的貓了,就算是靜態頁面,也是人家自身帶的東西,怎麼能讓你隨便給覆蓋了呢,但是我還是試着在eclipse3.6裏找了找相關的配置,還真有點收穫。
   
    右擊app項目,選擇Properties,下面有一項Web Project Settings,裏面有一條Context root,好像有點像了,默認是app,我把它改成了ROOT,保存一切都沒有問題,本以爲會和myeclipse是一樣的結果,但是部署完發現結構不對頭了,無論如何IDE都會把app這個目錄也會複製到ROOT目錄裏,這和上面myeclipse行爲不一致了,我還是沒有辦法脫離contextPath來訪問,就算是deploy到webapps的ROOT,裏面依然有個可恨的app目錄。
   
    這個困擾了我挺長的時間,網上好像也沒有提到這個問題,直到我又看了server.xml,發現path屬性的值改成了"/ROOT",原來context root的修改對應的是path屬性,這樣的話我只需要把context root設置成空,相應path屬性不也爲空了麼,這樣就搞定了,但是人家IDE是不讓你這麼幹的,Context root cannot be empty提示着我要走一些歪路子了,只能用最後一招,看看能不能改改你生成的IDE配置文件。
   
    最終找到項目所在目錄.settings\org.eclipse.wst.common.component文件,發現裏面有一條<property name="context-root" value="ROOT"/>,對應的就是上面的那條設置,直接value改成空,保存退出,依然部署到f:\target下面,重新publish項目,發現結構還是f:\target\app,但是驚喜的發現,server.xml中path屬性已經是空了,而docBase是我們喜歡的F:\target\app,儘管有個不認識的source="org.eclipse.jst.jee.server:app"屬性,但和我無關了,這下用http://localhost/index.jsp,就可以直接訪問我們部署好的app應用頁面了
   
    我不知道這樣做是不是最正確的,但是確實解決了問題,首先實現了部署目錄和tomcat的webapps分離,然後消除了contextPath訪問名字,IDE這個東西有時候能把人折騰死,有時真是覺得功夫在身外
   
       
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章