2011-09-01 348 views
134

我知道我可以將我的webapp(或它的WAR文件)重命名爲ROOT,但這是一個可怕的方式來做到這一點,恕我直言。現在,我檢查了tomcat的文檔&它說如何在Tomcat 7.0中設置Web應用程序的上下文路徑

,不建議直接放置元素在 server.xml文件

所以我想這樣做,它提出的另一種方法。

單個上下文元素可以被明確定義:在 單個文件位於/META-INF/context.xml裏面的應用程序文件中。

所以我創建了一個/META-INF/context.xml用下面的代碼,

<?xml version="1.0" encoding="UTF-8"?> 
<Context antiJARLocking="true" path="/"/> 

但是,當我重新啓動服務器部署後,仍然未能在「/」加載方面,仍與"/<WEB_APP_NAME>"裝好了

任何指針都有幫助。

+0

我曾經提交錯誤爲Tomcat 8 [警告在以下內容:一個上下文路徑必須是空字符串或與啓動' /'並且不以'/'結尾。路徑「/」不符合這些標準,並已更改爲「」](https://bz.apache.org/bugzilla/show_bug.cgi?id=58754) – gavenkoa

+1

原因「不推薦將元素直接在文件中給出的server.xml文件中:「這是因爲它使得修改上下文配置更具有侵入性,因爲在不重新啓動Tomcat的情況下無法重新加載主conf/server.xml文件。」下面接受的答案直接解決了這個問題,但如果您不可能再次修改此路徑或重新啓動不會造成太大的破壞性,那麼修改server.xml似乎並不合理。 – rimsky

回答

191

你可以做的是以下幾點;

添加一個名爲ROOT.xml文件<catalina_home>/conf/Catalina/localhost/

這的ROOT.xml將覆蓋默認設置爲Tomcat的安裝該引擎和主機(卡塔利娜和本地主機)根上下文。

將以下內容輸入到ROOT.xml文件中;

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

這裏,<yourApp>是的,好了,你的應用程序的名稱.. :)

而且你去那裏,你的應用程序現在是默認的應用程序,將在http://localhost:8080

顯示然而,有一個副作用;你的應用程序將被加載兩次。一次爲localhost:8080,一次爲localhost:8080/yourApp。要解決這個問題,你可以把你的應用程序放在<catalina_home>/webapps的外面,並在ROOT.xml的docBase標記中使用相對或絕對路徑。像這樣的東西;

<Context 
    docBase="/opt/mywebapps/<yourApp>" 
    path="" 
    reloadable="true" 
/> 

然後它應該是一切OK!

+21

向下投票?好吧,但是爲什麼?如果有更好的選擇,讓我知道! :D – Paaske

+1

這可以與普通webapps文件夾中的其他戰爭一起使用嗎? – chrislovecnm

+1

查看文檔http://tomcat.apache.org/tomcat-7.0-doc/config/context.html docbase是/ your/yourApp的路徑,路徑必須是「」(這是一個空字符串),這意味着根上下文 –

11

下面是唯一的解決方案,爲我工作。在conf/server.xml中

<Context path="" docBase="yourAppContextName"> 

    <!-- Default set of monitored resources --> 
    <WatchedResource>WEB-INF/web.xml</WatchedResource> 

</Context> 

去Tomcat服務器這個添加到主機節點。XML文件,並設置路徑空白

+1

將位於'server.xml'或'context.xml'?我在我的'context.xml'中看到一個xml標籤'' – Saif

+5

server.xml中還有一個上下文xml標籤但是不鼓勵用於上下文定義的server.xml用法 –

3

這個小代碼爲我工作,使用虛擬主機

<Host name="my.host.name" > 
    <Context path="" docBase="/path/to/myapp.war"/> 
</Host> 
+0

這是'server.xml'中的嗎?根據例如Ali.Mojtehedy以上這是有問題的。此外,其他答案指出'/ path/to'需要在正常的webapps路徑的*外*。 –

+0

似乎工作正常。當然,您不希望ROOT應用程序存在於同一個webapps文件夾中與您的應用程序衝突。 –

+0

這是我唯一的工作!謝謝。 – cgTag

-7

下面的技巧爲我工作。

1)從tomcat的server.xml文件(conf文件夾內)註釋/刪除下面的配置。

2)刪除tomcat webapps文件夾內的現有ROOT文件夾(如果有的話)。並將您的戰爭(例如:test.war)文件重命名爲ROOT.war。

請記住,將war文件重命名爲ROOT.war「ROOT」時應該是大寫字母。

限制:您只能在一個tomcat實例內部署一個應用程序。

+3

從問題:「我知道我可以重命名我的webapp(或它的WAR文件)到ROOT,但這是一個可怕的方式來做到這一點,恕我直言。」 –

+1

我不想限制自己只爲每個tomcat實例使用一個webapp。 – tareq

1

我遇到了這個問題一個月,把server.xml中的context標籤放到不安全的地方,影響了所有其他主機的上下文元素的部署,對於大的應用程序來說,連接錯誤也不是很好的隔離,例如你可能訪問其他站點按文件夾名稱domain2.com/domain1Folder !!還會加載兩次數據庫會話連接! 的另一種方法是把那個有背景標籤完整路徑這樣的ROOT.xml文件:

<Context path="" docBase="/var/lib/tomcat7/webapps/ROOT" /> 
中的conf

/卡塔利娜/ webappsfoldername 和部署war文件作爲ROOT.war內webappsfoldername ,還可以指定主機 這樣

<Host name="domianname" appBase="webapps2" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false" > 

     <Logger className="org.apache.catalina.logger.FileLogger" 
       directory="logs" prefix="localhost_log." suffix=".txt" 
      timestamp="true"/> 
</Host> 

在這種方法也適用於相同類型的應用程序用戶會議沒有很好的隔離! 你可能在app1裏面,如果app1與app2相同,你可以在通過服務器端會話自動登錄後登錄到app2?! 所以你必須保持用戶會話在客戶端緩存,而不是jsessionid! 我們可能會從localhost更改引擎名稱來解決它。但是讓我們說玩tomcat需要更多的時間,而不是與其他貓玩!

2

最快,可能是最好的解決辦法是有以下內容<TOMCAT_INSTALL_DIR>/conf/Catalina/localhost/ROOT.xml

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

而且你的web應用將可在http://<host>:<port>/

+1

該docBase目錄是絕對的還是相對於特定的文件夾? –

+0

我試過了,但沒有工作。我在'/ opt/tomcat/webapps/Foobar'中有一個名爲'Foobar'的應用程序。我嘗試將docBase設置爲'Foobar'和'/ opt/tomcat/webapps/Foobar',但是當我轉到'http:// /時,我仍然看到Tomcat主頁而不是我的Foobar應用程序。我甚至重新啓動了Tomcat。我究竟做錯了什麼? – kimbaudi

-1

它不建議像更新server.xml中的服務器配置或的ROOT.xml。

您可以在您的web應用程序META-INF目錄下放置一個context.xml配置文件,其中包含上下文路徑設置。這將覆蓋默認的服務器設置?

即:

<Context docBase="yourAppName" path="/yourAppPath" reloadable="true"> 
1

<Context docBase="yourAppName" path="" reloadable="true">

去Tomcat的server.xml文件,並設置路徑空白

1

在Tomcat中9。0,I只需要改變所述server.xml

<Context docBase="web" path="/web" reloadable="true" source="org.eclipse.jst.jee.server:web"/></Host> 

<Context docBase="web" path="" reloadable="true" source="org.eclipse.jst.jee.server:web"/></Host> 
+0

從最後刪除。 – sweetfa

相關問題