El contexto es el siguiente, tenemos una aplicación que trabaja con SmartGwt o Gwt y queremos obtener la ip del cliente sin tener que molestar al servidor(por determinada razón o limitación) entonces la solución es la siguiente, hay dos formas:
1. Desde SmartGwt/Gwt directamente utilizando la siguiente instrucción:
Código:
la cual nos devuelve una cadena que contiene la ip local pero también trae el alias (si existe) y otros datos, por consiguiente luego habría que descomponerla pero eso es lo de menos, el resultado obtenido en mi caso es asi: http://127.0.0.1/debug/String cadenaIp = GWT.getHostPageBaseURL();
2. La otra forma de hacerlo es utilizando JSNI(JavaScript Native Interface), de esta forma definimos una funcion javaScript en el archivo html de nuestra aplicación y luego la llamamos desde SmartGwt/Gwt mediante un metodo, esto lo podríamos hacer mas o menos asi:
Llamada desde smartGwt/Gwt:
Código:
Maetodo SmartGwt/Gwt: String str_User_ip = getIP();
Código:
Funcion JavaScript: public native String getIP() /*-{ return $wnd.myIP(); }-*/;
Código:
Dejo las dos funciones para quien necesite la publica o la privada (recuerden no colocar las 2 con el mismo nombre o comentar una de las 2 cuando vayan a usar cualquiera), como les dije esto me funciono a mi con smartGwt/Gwt + eclipse y simplemente quería compartirlo, no se si el post encaja acá o si ya existen otros con información similar así que siéntanse libres de eliminarlo, molerlo etc etc en caso de ser necesario. Código Javascript:Ver original
<script type="text/javascript" language="javascript"> //Recupera ip privada function myIP() { var cadenaIp = java.net.InetAddress.getLocalHost(); var ip = cadenaIp.getHostAddress(); return ip } //Recupera ip publica function myIP() { if (window.XMLHttpRequest) xmlhttp = new XMLHttpRequest(); else xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); xmlhttp.open("GET","http://api.hostip.info/get_html.php",false); xmlhttp.send(); hostipInfo = xmlhttp.responseText.split("\n"); for (i=0; hostipInfo.length >= i; i++) { ipAddress = hostipInfo[i].split(":"); if ( ipAddress[0] == "IP" ) return ipAddress[1]; } return false; </script>