如何检测客户国家

时间:2015-05-14 12:20:28

标签: jsp geolocation

我挑战了一个问题来检测客户端浏览器的位置和位置。我搜索谷歌很多时间但没有正确答案,java.util.Locale无法正常工作。有没有解决方案请与我分享

4 个答案:

答案 0 :(得分:2)

java.util.Locale无法工作的原因是,它使用的是您服务器的区域设置,而非客户端。

您可以从浏览器的用户代理处获取用户系统语言等信息。

有关详细信息,例如用户的位置,有不同的方法。一种方法是使用HTML5 Geolocation

<script>
var x = document.getElementById("demo");
function getLocation() {
    if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(showPosition);
    } else {
        x.innerHTML = "Geolocation is not supported by this browser.";
    }
}
function showPosition(position) {
    x.innerHTML = "Latitude: " + position.coords.latitude + 
    "<br>Longitude: " + position.coords.longitude; 
}
</script>

问题是,你不能依靠获取地理位置。我的浏览器(Safari)总是要求我给网站我的位置。所以我能够否认它。用户代理字符串始终存在。它可能会被更改,但您应该始终能够检索它。 虽然两者都没有首选语言,但您需要一个后备默认值。

编辑:显然,还有一种方法可以让客户首选Locale HttpServletRequest.getLocale()According to the docs,它将读取HTTP Accept-Language Header,这是另一种获取语言环境的方法,但也不是强制性的。如果没有区域设置,它只会返回null

所以到目前为止,您至少有三种获取信息的方法。所有这些都取决于浏览器,您可能不会依赖其中的一个。

答案 1 :(得分:1)

听起来您需要使用User-Agent来获取所需的信息。使用JSP,您可以按如下方式获取它:

String userAgent = request.getHeader("User-Agent");

包含类似于以下内容的字符串中的大多数客户端信息:

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.1 Safari/537.36

除此之外,您还可以使用ServletRequest的getLocale()方法,该方法将根据Accept-Language标头返回Locale。

答案 2 :(得分:0)

如下所示,您可以找到地理信息。

http://www.w3schools.com/htmL/html5_geolocation.asp

希望这有帮助。

答案 3 :(得分:0)

位置和区域设置是不同的问题。

位置(国家,地区等)检测基于IP地址。你可以通过ip java&#34; google&#34; geolocation并看到很多参考文献。例如,这一个:http://www.mkyong.com/java/java-find-location-using-ip-address/

从HTTP标头中检测到区域设置。来自http请求的Google&#34;语言环境&#34;并参考参考。例如:Specifying locale for http request/response

很快,HTTP标头Accept-LanguageAccept-Charset就是您的朋友。