【发布时间】:2015-03-11 12:17:17
【问题描述】:
我正在开发一个 REST API,我的想法是创建一个可以调用此 API 的网站 (Java Webapp),以及一个也将调用该 API 的移动应用程序。
但是,尽管离在线发布上述任何内容(到我自己的域)还差得很远,但我看不到我的应用程序如果部署在我的计算机以外的任何地方会如何工作。
这是因为我在整个商店都有硬编码的“localhost:8080”实例!
例如:
server.xml(我使用的是 Tomcat 8.0.20):
<Engine defaultHost="localhost" name="Catalina">
...
<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
SomeClass.java(这是我的 Web 应用程序中的类文件之一,不是我的 REST API)
final WebResource webResource = client.resource( "http://localhost:8080/api/get" );
以上 WebResource 来自 Jersey Client 1.8 依赖项,需要硬编码 URL 才能在指定路径访问我的 API。
这一切在本地都可以正常工作,但是当我将 API/Webapp 部署到生产环境时,这肯定会停止工作,对吧?
我想我在这里寻找三种解决方案之一:
- 一些实现允许我使用相对路径访问我的 REST API(例如,我只需要指定“/api/get”)。我计划在生产中将 API 和 Webapp 部署在同一个域上,所以我认为这不会是一个问题(?)
- 某种动态确定适当基本 URL 的方法,无论我在什么环境中部署应用程序,该方法都可以工作
- 任何其他可以使我的应用程序在这方面防弹的建议
我尝试使用选项 2
HttpServletRequest.getRequestURL()
虽然它返回正确的路径(至少在本地 - http://localhost:8080),但我不断收到以下异常:
com.sun.org.apache.xml.internal.utils.WrappedRuntimeException: The element type "hr" must be terminated by the matching end-tag "</hr>".
所以我暂时不使用这种方法。
感谢任何帮助。
谢谢:)
【问题讨论】:
-
该异常似乎与您的 URL 问题无关 - 查看堆栈跟踪以了解它的来源。
-
这是异常中唯一的一行(没有任何痕迹,看起来好像被抑制了)。无论如何,我的 HTML/XSL 文件实际上都不包含
元素。我的研究告诉我,这个异常是由导致 XML 格式不正确的中断响应引起的 -
好吧,如果没有堆栈跟踪,这听起来像是某个地方存在诊断问题 - 根本不清楚您在哪里看到该异常。
-
当我尝试在本地访问在 Tomcat 中运行的 API 时,该异常显示在我的控制台中。无论如何,我不是在寻求异常问题的解决方案,我更感兴趣的是在我的应用程序中随处可见硬编码“localhost”的替代方案,以准备有一天使用它
-
嗯,我通常喜欢在继续下一个错误之前了解一个错误,但是......基本上你会希望能够拥有不同的配置文件。例如,Spring 应该让你有一个属性文件来加载配置——在本地运行时你可以使用 localhost,而在其他时候你可以使用生产 URL。
标签: java spring rest tomcat jersey