【问题标题】:Fetch application port without access to request object在不访问请求对象的情况下获取应用程序端口
【发布时间】:2011-09-19 04:39:02
【问题描述】:

我有一个在服务器启动时启动的后端进程。完成此过程后,我会向用户发送一封电子邮件。我需要访问应用程序端口才能构建在同一实例上运行的 Web 报告的完整 URL。有没有办法在不访问请求对象的情况下获取端口?

【问题讨论】:

  • 它是一个运行在 Jetty 上的 spring 应用程序。

标签: java spring jetty


【解决方案1】:

如果您的应用程序中至少有一个 http 请求调用,您可以从中获取端口:

int portNumber = request.getServerPort();

也许你的启动脚本可以进行这样的调用。

更多详情:http://www.kodejava.org/examples/211.html

【讨论】:

    【解决方案2】:

    我需要访问应用程序端口才能构建在同一实例上运行的 Web 报告的完整 URL。有没有办法在不访问请求对象的情况下获取端口?

    为什么不将此作为属性存储在后端进程的配置文件中?如果只需要需要嵌入到电子邮件中的端口(甚至是一个不变的网站 URL 片段),那么代码将会变得更加简单。

    此外,与定期更改端口号相比,有问题的管理员要做的事情更好。

    相关问题(但不完全相同)

    1. Root URl of the servlet
    2. Finding your application's URL with only a ServletContext

    它们都提供了原因,为什么 servlet 容器看到的路径不必与最终用户看到的路径相同。即使两者相同,也没有办法,没有人可以访问这些信息

    • 读取服务器配置文件。在这种情况下,它将是 $JETTY_HOME/etc/jetty.xml,它在 Connectors 元素中包含必要的信息。
    • 获取对ServletRequest 对象的引用,这可能不是此问题的有效答案。

    【讨论】:

    • 问题是端口号确实发生了变化。因为这是为不同的 spring 应用程序实例运行的通用服务。所以我事先不知道港口。
    • 恐怕你的评论没有任何意义。如果您有多个应用程序在与不同端口关联的不同容器上运行,那么您需要找到一种将端口号与报告关联的方法;重点仍然是该信息应该是可配置的。此外,由于 NAT 解决方案或反向代理的存在,任何从请求 URL 派生端口的尝试都将失败。
    • 端口在配置文件中定义。现在我从这个文件中获取它并设置在一个变量中。
    • 不完全是。但是传递给码头参数的类似配置文件。
    猜你喜欢
    • 2018-01-12
    • 2010-10-03
    • 2017-02-13
    • 1970-01-01
    • 1970-01-01
    • 2018-05-14
    • 2017-09-04
    • 2011-12-11
    • 1970-01-01
    相关资源
    最近更新 更多