我正在使用Spring MVC编写Java Web应用程序.我有一个后台进程通过数据库查找必须通过电子邮件发送给我的用户的通知.这些电子邮件消息需要包含应用程序的超链接.这似乎是一个相当常见的网络应用程序模式,但我遇到了麻烦.
如何使用服务器名称和上下文路径派生应用程序的完全限定URL?我无法访问HttpServletRequest中的任何方法,因为我将其作为后台进程运行,而不是响应Web请求.我能做的最好的就是访问ServletContext.
目前我将基本URL放入配置文件并在启动时读取它,但是此应用程序将获得许可并部署到客户的应用程序服务器,如果可能,我希望他们不必手动配置它.
建议不要在运行时动态准备URL,尤其是基于ServletRequest.这主要是因为您不知道用户将用于访问应用程序的URL - 应用程序服务器可能位于Web服务器,防火墙或负载平衡器之后.为了缩短它,人们无法预测网络拓扑.
您当前从属性文件中获取URL的技术足以解决上述问题.也许你应该考虑提供一个管理控制台来管理邮件中出现的URL,特别是如果有一个管理控制台,或者有相关的选项应该进入一个.
编辑:我的最后一点与Tony所说的相呼应.
如果配置文件不存在,为什么不在第一次运行应用程序时出现设置网页(例如在WEB-INF文件夹中.使用ServletContext,您可以调用getRealPath并获取文件的真实路径和看看它是否存在().如果存在,重定向到应用程序开始页面,如果没有,请打开管理页面).
你最好使用ServletContext来读取web.xml中的一些设置,并获取上下文路径,只有HttpRequest可以为你提供FQ URL.