2016-02-26 267 views
0

我創建了一個grails應用程序,它在IDEA中運行良好,然後我將它打包爲一個名爲api.war的war文件,由gradle.jetty(版本爲9.3.7)部署後,我用chrome 。 Something wrong like this。如果我直接在瀏覽器中輸入url「http://localhost:8080/api/json/xxx.json」,則應用程序無法訪問數據,而我可以訪問數據。jetty部署war文件

然後我將其重命名爲root.war,以便我可以通過根路徑訪問它。該應用程序可以工作!它可以完美地訪問數據。

如果我有兩個應用程序,他們都喜歡api.war。正如你所看到的,根路徑不能是一半,我該怎麼辦?順便說一句,我不能在部署後在webapps中找到任何文件夾。 tomcat和jetty的區別?

+0

也許你在你的應用中有相對路徑。如果您將其部署爲名爲ROOT.war,它將被放置在您的服務器的根上下文中(在URL中沒有應用程序名稱)。 – Stefan

+0

是的,我明白你的意思。我想知道如果我必須部署兩個應用程序,我該怎麼做?他們都有相對路徑。 – ceny

+0

讓我明白。你有一個單一的戰爭文件,你想在不同的環境下部署它們嗎? – josivan

回答

0

你不需要複製你的戰爭文件。看看下面的步驟,這些可以幫助您:

  1. 將您的文件複製到文件系統中的文件夾。例如在/opt/war
  2. 在您的webapps文件夾下創建兩個xml文件。
  3. 按照以下描述定義每個xml;
<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" 
    "http://www.eclipse.org/jetty/configure_9_0.dtd"> 
<Configure id="app1" class="org.eclipse.jetty.webapp.WebAppContext"> 
    <Set name="war">/opt/war/app.war</Set> 
    <Set name="contextPath">/app1</Set> 
</Configure> 

對於您需要定義id和contextPath每一個應用程序。

我希望答案能幫到你

+0

我試過之前,我問。當我設置contextPath爲'/ api',應用程序仍嘗試通過「http:// localhost:8080/json/xxx.json」訪問數據。實際上,數據的位置是「http:// localhost:8080/api/json/xxx.json」。我只是想知道,爲什麼應用程序仍然嘗試通過錯誤的URL訪問數據後,我將contextPath設置爲'/api'.Everything會正常工作,只有當我設置contextPath爲'/'。 – ceny

+0

你是如何在應用程序中聲明api上下文/路徑的? – josivan

+0

在文件'application.yml'中?我沒有設置它。 – ceny