[Angular, Jersey]为什么我必须使用 jersey 在 $http 中指定应用程序名称

[Angular, Jersey]Why i have to specify the application name in $http using jersey

我想知道为什么我在调用 $http 时必须指定我的应用程序的名称。每次我在网上看到一个使用 jersey 和 angular 的示例时,他们都没有指定应用程序名称。

这是我必须写的才能让它工作:

$http({method: "POST", url: '/MyAppName/rest/service'})

这是我在网上看到的,但对我不起作用:

$http({method: "POST", url: '/rest/service'}) 

我的web.xml很常见:

<servlet-mapping>
    <servlet-name>jersey-serlvet</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>

我不想指定我的应用程序的名称。那怎么办呢?

我认为您的 Web 应用程序部署在 Tomcat 或 Jetty 容器上。由于您可以在这样的容器上部署几个应用程序,因此每个应用程序的路径不能是您服务器的根目录 (/),而是与根目录相关的东西 - 在那些应用程序服务器中,它是您的应用程序的名称。

如果您的 .war 安装为某个名称下的网络应用程序,则对该应用程序的 REST 资源的所有请求都需要与该网络应用程序的名称相关:

在那种情况下,你有像

这样的路径
  • /经理/

  • /myWar/

可以通过在重写 URL 的应用服务器前面使用 apache httpd 或 Tomcat 的许多现有 rewrite filters 之一来解决此问题。

另一种解决方案是将所有 REST 服务部署到一个名为 rest 的 war 中,并将 HTML 和 JS 作为静态资源 and map the path to the static resources 以便您可以访问他们来自根 url。就个人而言,我不认为将 java 类 和 html 分开是值得的,但这是您的选择。