One of the best parts of hosting with App Engine is the free geolocation service it provides. Every incoming request has special AppEngine location headers added to it.
For instance, here’s how to find out the user’s city (req is the servlet’s HttpServletRequest object):
String city = req.getHeader("X-AppEngine-City");
Other geolocation information is available as well: the user’s country (X-AppEngine-Country), the region of that country (X-AppEngine-Region), and the nearest city’s latitude and longitude (X-AppEngine-CityLatLong).