2016-02-26 227 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