我正在使用Spring MVC编写Java Web应用程序。我有一个后台进程,该进程遍历数据库并找到必须通过电子邮件发送给我的用户的通知。这些电子邮件需要包含指向应用程序的超链接。对于Web应用程序来说,这似乎是相当普遍的模式,但是我遇到了麻烦。
如何使用服务器名称和上下文路径导出应用程序的标准URL?我无权访问HttpServletRequest中的任何方法,因为我将其作为后台进程运行,而不是响应Web请求。我能做的最好的就是访问ServletContext。
目前,我正在将基本URL放入配置文件中,并在启动时读取它,但是此应用程序将被许可并部署到客户的应用程序服务器,如果可能的话,我希望他们不必手动配置。
不建议在运行时动态准备URL,尤其是基于ServletRequest时。这主要是因为您不知道用户将用于访问应用程序的URL- 应用程序服务器可能位于Web服务器,防火墙或负载平衡器之后。为了简短起见,无法预测网络拓扑。
您当前从属性文件中获取URL的技术足以解决上述问题。也许您应该考虑提供一个管理控制台来管理邮件中显示的URL,特别是如果有一个管理控制台,或者应该将相关选项整合到一个控制台中。
编辑:我的最后一点与托尼所说的相呼应。