【发布时间】:2019-04-11 21:27:17
【问题描述】:
假设我在 Payara/Glassfish(或任何其他 WebContainer)上托管 JavaEE WebApp。
如果 VirtualServer-Config 默认指向应用程序,我会到达地址 https://a.b/appname/myservleturlpattern 或 https://a.b/myservleturlpattern 下的 Servlet。
通常我可以在任何 HttpServlet (ServletContext) 中轻松获取该地址。
但是现在,当我在非 servlet 类中运行后台任务 (@Schedule) 时,我将如何获得该地址?
我想要什么:从任何类(尤其是非 Servlet 类)获取应用程序的基地址 https://a.b/appname/ 或 https://a.b/。 (无法获取也不需要 myservleturlpattern,因为我不在 servlet 中。)
到目前为止,我唯一的想法是听我所有的 Servlet(无论如何都扩展相同的自定义 HttpServlet)并在第一次调用时设置一个静态变量,但这真的很不干净和 hack-isch .
有任何更好的想法?
【问题讨论】:
-
你想从 servlet 上下文中得到什么?
-
我想要的:从任何类(尤其是非 Servlet 类)获取应用程序的基地址 a.b/appname 或 a.b。 (无法获取并且不需要 myservleturlpattern,因为我不在 servlet 中。)
-
如果没有请求,您将无法获得该信息。容器不知道客户端可能到达它的任何路线,实际上几乎总是很多。它可以通过请求获得,因为客户端告诉容器它是如何调用容器的。如果您必须拥有此信息,我建议您改为提供端点并使用 cron 作业在外部调用它。理想情况下,您的应用程序不应依赖于此,这会使部署变得困难。您自己的解决方案不起作用:如果在计划之前没有提出请求怎么办?
-
是的,我知道我的解决方案不是最好的。 Ticket stackoverflow.com/questions/53206594/… 和我有完全相同的问题......我想我可以保证我不会落后于负载平衡或代理。
-
正确链接到其他主题:stackoverflow.com/questions/675730/…
标签: jakarta-ee web-applications