【发布时间】:2015-09-12 12:20:12
【问题描述】:
我正在尝试使用 Spring Boot 创建一个非常简单的 RESTful Web 服务,以对作为参数传递的内容执行 NLP。你可以在我的GitHub找到它。
由于某种原因,我无法将其作为 WAR (see here) 部署到我的家庭服务器中的 Tomcat 容器中,因此我决定至少尝试将其设置为可运行的 JAR。
如果我通过调用在我的开发机器上运行它:
java -jar -Xss32M -Xmx8G -XX:+UseG1GC -XX:+UseStringDeduplication ClearWS-0.1.0.jar
它就像一个魅力。如果我将浏览器指向http://localhost:8888/process?content=This%20is%20a%20test.,我会得到预期的 JSON:
{ "id": 1,
"sentences": [
{ "start": 0,
"end": 0,
"content": "This is a test.",
"tokens": [
{ "start": 0, "end": 4, "index": 0, "text": "This", "posTag": "DT", "chunkTag": "NP", "lemma": "this" },
{ "start": 5, "end": 7, "index": 1, "text": "is", "posTag": "VBZ", "chunkTag": "VP", "lemma": "be" },
{ "start": 8, "end": 9, "index": 2, "text": "a", "posTag": "DT", "chunkTag": "NP", "lemma": "a" },
{ "start": 10, "end": 14, "index": 3, "text": "test", "posTag": "NN", "chunkTag": "NP", "lemma": "test" },
{"start": 14, "end": 15, "index": 4, "text": ".", "posTag": ".", "chunkTag": ".", "lemma": "." } ],
"size": 5
} ]
}
现在,我已将ClearWS-0.1.0.jar 文件移至我的家庭服务器,并在那里使用与上述相同的命令启动它:没有错误消息。在本地(通过 localhost:8888),一切仍然运行良好。但是,如果我尝试远程使用它,它就不起作用:一段时间后,浏览器告诉我我的连接尝试失败了。
那台家庭服务器机器有一个不经常更改的 NAT 地址,所以我可以使用 no-ip.com 挂钩它并访问它。请注意,我部署到 Tomcat 容器的其他 J2EE 服务完全可以远程访问和使用。我认为可能是嵌入式 Tomcat 与独立的 Tomcat 冲突,所以我关闭了后者,但仍然无法访问 ClearWS-0.1.0。
我开始认为 Spring 理解我仍然不完全信任它,所以它故意让我失败......开玩笑,任何对 Spring 和网络有更好理解的人都可以帮助我解决这个问题?提前致谢。
解决方案:我只是忘记转发端口 8888...一旦将该配置添加到我的路由器,我就可以远程使用该服务。现在我希望能够将它部署在我现有的 Tomcat 容器中......有什么想法吗?
【问题讨论】:
-
这听起来不像是 Spring 的问题,而是网络问题。你确定8888端口可以访问吗?听起来好像不是。如果您可以运行 jar 并从服务器上的 localhost 访问它,那么有某种防火墙阻止了该请求。
-
@hyness 你是对的,我没有转发 8888 端口。真丢脸!
-
@StefanoBragaglia 假设我无权访问路由器配置,是否有任何解决方案可以解决这个问题?
标签: java spring tomcat nlp spring-boot