我想知道为什么我在调用 $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>
我不想指定我的应用程序的名称。那么怎么办呢?
最佳答案
我相信您的网络应用程序部署在 Tomcat 或 Jetty 容器上。由于您可以在这样的容器上部署几个应用程序,因此每个应用程序的路径不能是您服务器的根目录 (/),而是与根目录相关的内容 - 在这些应用程序服务器中,它是您的应用程序的名称。
如果您的 .war 安装为某个名称下的 Web 应用程序,则对该应用程序的 REST 资源的所有请求都需要与该 Web 应用程序的名称相关:
在那种情况下,你有像
这样的路径/经理/
/myWar/
这个问题可以通过在重写 URL 的应用服务器前面使用 apache httpd 或许多现有的之一来解决 rewrite filters用于 Tomcat。
另一种解决方案是将所有 REST 服务部署到一个名为 rest
的 .war 中,并将 HTML 和 JS 作为静态资源部署 and map the path to the static resources这样你就可以从根 url 中找到它们。就个人而言,我认为分离 java 类和 html 不值得,但这是您的选择。
关于angularjs - [Angular, Jersey]为什么我必须使用 jersey 在 $http 中指定应用程序名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35801535/