【问题标题】:How to configure embedded Tomcat integrated with Spring to listen requests to IP address, besides localhost?除了 localhost,如何配置与 Spring 集成的嵌入式 Tomcat 以侦听 IP 地址请求?
【发布时间】:2014-07-19 17:28:10
【问题描述】:

我正在尝试运行 spring 指南中的示例: Building a RESTful Web Service

如果我打开 localhost:8080/greeting 效果很好。

但如果我打开 192.168.1.111:8080/greeting140.112.134.22:8080/greeting 则无法建立连接,尽管实际上使用了两个 IP通过我的电脑上网。

有人可以建议我如何在 Spring 中配置嵌入式 Tomcat 以接受除 localhost(即 127.0.0.1)之外的其他 IP 地址上的 HTTP 请求吗?

谢谢! :)

【问题讨论】:

  • 如果您只是按照您在构建 Web 服务上发布的教程链接进行操作,那么您的 Web 服务并未在嵌入式 Tomcat 或任何 Web 应用程序服务器中运行。它在一个独立的 java 应用程序上运行,该应用程序是一个 main 方法。您需要制作一个WAR文件并部署在tomcat服务器中。
  • shazin 可能一针见血,但有很好的诊断方法可以解决这类问题。为什么不使用 netstat 实用程序来查看是否在端口 8080 上发布服务?如果是,请尝试 telnet 到 IP 和端口。这些是 Web 开发人员的基本工具 - 您需要熟悉。它们在 Window 和 Linux 上可用。
  • @user3467488,你们都错了。他链接的教程使用的是 Spring Boot,它允许您使用嵌入式应用服务器创建可执行 JAR,等等。默认值为 Tomcat,但您可以通过简单地包含 Jetty JAR 而不是 Tomcat JAR 将其换成 Jetty。这是一个非常有趣的平台,并提供了一种将正在运行的 Spring 应用程序放在一起的快速方法。您可以选择将您的 Spring Boot 应用程序转换为 WAR,但他链接到的教程根本没有涉及。

标签: java spring tomcat spring-mvc spring-boot


【解决方案1】:

为了指定你想让Tomcat也绑定哪个IP,我相信你可以简单地将以下内容添加到你的application.properties中:

server.address=<your_ip>
server.port=<your_port>

&lt;your_ip&gt; 替换为您希望它监听的IP 地址。此属性和其他基本属性可以在 Spring Boot Reference Guide, Appendix A 中找到。

另一种配置嵌入式 Tomcat 的方法是通过实现EmbeddedServletContainerCustomizer 接口在代码中创建自定义配置器。您可以在Spring Boot Reference Guide, Section 55.5-55.8 中阅读更多相关信息。

【讨论】:

  • 默认情况下,tomcat 会绑定到 0.0.0.0 并监听所有可用的地址。如果其他地址或端口不起作用(如防火墙),则必须对其他地址或端口进行环境限制。
  • @CodeChimp 感谢您的建议!对于这个Spring guide,我们需要修改的“application.properties”文件在哪里?
  • 我认为在 Spring Boot 中它会尝试首先查看 JAR,然后是类路径,然后是运行应用程序的本地目录。文档/参考指南对此进行了介绍。
  • 这个链接解释了如何加载 spring boot 属性。有几个地方可以将配置从命令行参数传递到外部 yml 或属性文件。 docs.spring.io/spring-boot/docs/current/reference/html/…
  • 如果指定了这个 application.properties 的位置会很棒。我在 Spring 文档中阅读了很多关于 application.properties 的内容。但他们并没有在简单的文本中提到 - 将此 application.properties 放在您的应用程序根目录或其他地方
【解决方案2】:

只需在 application.properties 文件中添加:

server.address=0.0.0.0

【讨论】:

    【解决方案3】:
    1. 尝试将其添加到 java 参数中: -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv6Addresses=false

    2. 从 curl 运行查询: curl -vvv -X GET "http://192.168.1.111:8080/greeting"

    如果 1. 没有帮助,那么很可能是您的防火墙/代理阻止了连接。卷曲应该给出适当的指示

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-24
      • 2015-06-30
      • 2017-08-12
      • 1970-01-01
      • 1970-01-01
      • 2016-01-08
      • 2016-08-18
      • 2013-05-30
      相关资源
      最近更新 更多