java如何获取公网IP?如果无法获取如何对访问者进行定位?

有个需求,需要得知网站访问者的大概地理位置,经纬度。应该怎么办啊,求给点思路谢谢,
百度了半天,也找不到获取公网ip的办法

 public String getRemortIP(HttpServletRequest request) {  
        if (request.getHeader("x-forwarded-for") == null) {  
            return request.getRemoteAddr();  
        }  
        return request.getHeader("x-forwarded-for");  
    }  
 //获得客户端真实IP地址的方法二:
    public String getIpAddr(HttpServletRequest request) {  
        String ip = request.getHeader("x-forwarded-for");  
        if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  
            ip = request.getHeader("Proxy-Client-IP");  
        }  
        if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  
            ip = request.getHeader("WL-Proxy-Client-IP");  
        }  
        if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  
            ip = request.getRemoteAddr();  
        }  
        return ip;  
    }
 public String getAddressByIP(String strIP)
    { 
      try
      {
        URL url = new URL( "http://ip.qq.com/cgi-bin/searchip?searchip1=" + strIP); 
        URLConnection conn = url.openConnection(); 
        BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "GBK")); 
        String line = null; 
        StringBuffer result = new StringBuffer(); 
        while((line = reader.readLine()) != null)
        { 
          result.append(line); 
        } 
        reader.close(); 
        strIP = result.substring(result.indexOf( "该IP所在地为:" ));
        strIP = strIP.substring(strIP.indexOf( ":") + 1);
        String province = strIP.substring(6, strIP.indexOf("省"));
        String city = strIP.substring(strIP.indexOf("省") + 1, strIP.indexOf("市"));
        return strIP+province+city;
      }
      catch( IOException e)
      { 
        return "读取失败"; 
      }
    }

127.0.0.1
127.0.0.1
IP地址:Lenovo-PC/172.27.35.1
这几个方法我都试了,都无法获取公网ip,

获得客户端真实IP地址的方法二
这个办法是可以的。但是前提是你必须把你的网站部署到服务器上才能看到效果。如果你在局域网甚至本机上访问,获得的是内网或者本机的ip。