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

例如,如果http://www.uswebsite.com/,则显示美国网站。并且if 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=europewebsiteString server=europewebsite.co请告知,因为我无法在本地进行测试。

最佳答案

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

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



另一方面,如果您尝试在servlet中检测当前请求的虚拟主机名,那么您的httpRequest.getServerName()会为您提供该主机名,该主机名与HTTP请求的第一行中显示的一样(除非已将其重写.. )。



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

09-11 18:59