当前位置:  开发笔记 > 编程语言 > 正文

仅使用ServletContext查找应用程序的URL

如何解决《仅使用ServletContext查找应用程序的URL》经验,为你挑选了2个好方法。

我正在使用Spring MVC编写Java Web应用程序.我有一个后台进程通过数据库查找必须通过电子邮件发送给我的用户的通知.这些电子邮件消息需要包含应用程序的超链接.这似乎是一个相当常见的网络应用程序模式,但我遇到了麻烦.

如何使用服务器名称和上下文路径派生应用程序的完全限定URL?我无法访问HttpServletRequest中的任何方法,因为我将其作为后台进程运行,而不是响应Web请求.我能做的最好的就是访问ServletContext.

目前我将基本URL放入配置文件并在启动时读取它,但是此应用程序将获得许可并部署到客户的应用程序服务器,如果可能,我希望他们不必手动配置它.



1> Vineet Reyno..:

建议不要在运行时动态准备URL,尤其是基于ServletRequest.这主要是因为您不知道用户将用于访问应用程序的URL - 应用程序服务器可能位于Web服务器,防火墙或负载平衡器之后.为了缩短它,人们无法预测网络拓扑.

您当前从属性文件中获取URL的技术足以解决上述问题.也许你应该考虑提供一个管理控制台来管理邮件中出现的URL,特别是如果有一个管理控制台,或者有相关的选项应该进入一个.

编辑:我的最后一点与Tony所说的相呼应.



2> Tony BenBrah..:

如果配置文件不存在,为什么不在第一次运行应用程序时出现设置网页(例如在WEB-INF文件夹中.使用ServletContext,您可以调用getRealPath并获取文件的真实路径和看看它是否存在().如果存在,重定向到应用程序开始页面,如果没有,请打开管理页面).

你最好使用ServletContext来读取web.xml中的一些设置,并获取上下文路径,只有HttpRequest可以为你提供FQ URL.


对于所有向下投票的人:用户正在访问www.acme.com这是一个F5防火墙/反向代理,它连接到http://loadbalancer.internal.acme.com上的内部负载均衡器,并最终点击您的网络服务器http://appserver3.internal.acme.com.您要做的最后一件事是(重新)将用户引导到http://appserver3.internal.acme.com上的页面.给出的答案是正确答案,你不能做得更好.
推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有