【问题标题】:How to get Server/Servlet Context without HttpServlet or HttpServletRequest? [duplicate]如何在没有 HttpServlet 或 HttpServletRequest 的情况下获取服务器/Servlet 上下文? [复制]
【发布时间】:2019-04-11 21:27:17
【问题描述】:

假设我在 Payara/Glassfish(或任何其他 WebContainer)上托管 JavaEE WebApp。 如果 VirtualServer-Config 默认指向应用程序,我会到达地址 https://a.b/appname/myservleturlpatternhttps://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/appnamea.b。 (无法获取并且不需要 myservleturlpattern,因为我不在 servlet 中。)
  • 如果没有请求,您将无法获得该信息。容器不知道客户端可能到达它的任何路线,实际上几乎总是很多。它可以通过请求获得,因为客户端告诉容器它是如何调用容器的。如果您必须拥有此信息,我建议您改为提供端点并使用 cron 作业在外部调用它。理想情况下,您的应用程序不应依赖于此,这会使部署变得困难。您自己的解决方案不起作用:如果在计划之前没有提出请求怎么办?
  • 是的,我知道我的解决方案不是最好的。 Ticket stackoverflow.com/questions/53206594/… 和我有完全相同的问题......我想我可以保证我不会落后于负载平衡或代理。
  • 正确链接到其他主题:stackoverflow.com/questions/675730/…

标签: jakarta-ee web-applications


【解决方案1】:

ServletContextListener 正是为此目的,但可能会有更好的解决方案,具体取决于您想用它做什么

【讨论】:

  • 太棒了!谢谢!没有考虑初始化程序...
猜你喜欢
  • 2017-11-24
  • 2013-05-19
  • 1970-01-01
  • 1970-01-01
  • 2014-10-07
  • 2019-02-04
  • 1970-01-01
  • 2013-12-26
  • 1970-01-01
相关资源
最近更新 更多