1

我正在处理的项目有多个实例(即不同的网站)在单个代码库中运行。根据 URL,我们显示相应的网站。

例如,如果http://www.uswebsite.com/我们显示美国网站。如果http://www.cawebsite.com/ 将显示加拿大网站。为检测这一点而编写的代码是

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

String server` = httpRequest.getServerName();

如果请求来自http://www.uswebsite.com/那么根据上面的代码String server = uswebsite所以我们编写了额外的代码来弹出相应的站点

我们现在计划将欧洲实例包含在同一代码库中,我看到欧洲站点的 URL 将类似于http://www.europewebsite.co.uk/。使用上面的 getServer() 它将获取String server=europewebsite. 最后加上 .co.uk 后,上面的代码仍然会得到String server=europewebsite,或者String server=europewebsite.co请告知,因为我无法在我的本地测试它。

4

2 回答 2

2

您问题的措辞相当混乱,因此我假设您只是想从分层 URL 字符串中提取主机名。

最可靠的方法是为 url 字符串构造java.net.URLor的实例java.net.URI,并使用相关的 getter 来提取主机名。


另一方面,如果您尝试在 servlet 中检测当前请求的虚拟主机名,那么您httpRequest.getServerName()会为您提供该主机名,因为它出现在 HTTP 请求的第一行(除非有东西重写了它......)。


另一方面,如果您只是想"europewebsite"从 DNS 名称中提取"www.europewebsite.co.uk",则没有通用的解决方案。我建议将 DNS 转换为全小写,并在您已使用您准备识别的所有变体预先初始化的表中进行查找。

于 2012-10-29T12:52:35.533 回答
0

通常 httpRequest.getServerName() 将返回主机名,在您的情况下它是完整的名称,即。“欧洲网站.co.uk”。

于 2012-10-29T12:59:43.040 回答