java获得客户端的国别



一个学长需要在服务器端判断客户端是哪个国家来的,开始考虑的是基于ip,查ip数据库,但是考虑到国家ip数据库不好找(卖的很贵)而且难于维护,很苦恼该怎么解决。

通过阅读api,我发现Locale类有一个getCountry方法,可以得到国家的ISO码,这就有了眉目,只要能在请求中得到这个ISO码就ok了。

于是就开始分析http request 的首部。首先通过request对象的getHeaderNames得到一个首部name的Enumeration,循环打印出来一看,没有需要的东西,很纳闷,为什么我得到的Header和别人说的不一样?少了一些东西,莫非是我获得的途径有问题?

又仔细看了HttpServletRequest类的所有方法,突然发现,它是从ServletRequest接口继承来的,那就去接口看看吧!

果然,终于找到了我想要的东西:








java.util.Locale [<font color="#ae0405">getLocale</font>](mk:@MSITStore:D: books J2EE_API.chm::/javax/servlet/ServletRequest.html#getLocale())<font face="NSimsun">()</font>

           Returns the preferred <font face="NSimsun">Locale</font> that the client will accept content in, based on the Accept-Language header.


就是它了,有了client的Locale,得到国家还不是小菜一碟。

request.getLogale().getCountry();

request.getLocale().getDisplayCountry()

request.getLocale().getDisplayName()

request.getLocale().getISO3Country()

分别得到:

CN

中国

中文 (中国)

CHN


加载评论框需要翻墙