Vinnie’nin mutfağından : Ortaya karışık Java Script Engine, JSON, Web Service, Google Maps
jsp, genel, ajax, webservice, webservis, java September 14th, 2008
Merhabalar,
Bu yazımızda Json objesi döndüren bir internet web servisi kullanacağız. Bunu Json’dan Java dönüşümünü yapan bir kütüphane ile değil Java 6 ile gelen Script Motorunu kullanarak yapacağız.
Önce Json’ın ne olduğuna bakalım:
Json aslında bir Javascript kodudur. Javascipt olarak çalıştırıldığında nesnelere, dizilere vb dönüşür, Javascript artık yaygın olduğu için bu yöntem nesnelerin Serialization işleminde yani String olarak sistemden sisteme aktarılmasında kullanılır. Bir Json cümlesi şuna benzer:
[’1′,{a:{b:’c'}, b:1}]
Burada [] işaretleri bir diziyi tanımlar, bu dizinin ilk elemanı metin olarak ‘1′ nesnesi, ikinci elemanı ise “Map”tir. “Map”ler anahtar değer çifterini tutmaya yarar. Burada “a” anahtarı yine bir Map tutmakta b anahtarının karşılığında ise numara olarak 1 vardır.
Şimdi bu nesneyi parse edelim:
Scriptable o = (Scriptable) new javax.script.ScriptEngineManager().getEngineByExtension(”js”)
.eval(”$=[’1′,{a:{b:’c'}, b:1}]”);
Burada o nesnesi objemizin dönüşmüş halini barındırıyor. Scriptable interface’ini kullanarak özelliklere erişebiliyoruz:
Object x = ((Scriptable)((Scriptable) o.get(1, null)).get(”a”, null)).get(”b”, null);
Bu şekilde nesnemizin özelliklerine de eriştikten sonra internetten Json döndüren bir servisi kullanabiliriz.
Moha Geo, internette IP ile ilgili yer bilgilerini coğrafi olarak enlem ve boylam da dahil olmak üzere Json objesi olarak döndüren bir sevise sahip.
Öncelikle buradan IP’ye ait bilgileri alalım:
String json = new BufferedReader(new InputStreamReader((InputStream)new URL(”http://geoinfo.mohanjith.net/api2/?ip=” + theIP).getContent())).readLine();
Sonrasında ise bu Json cümlesini js olarak çalıştıralım ve Scriptable nesnesine ulaşalım:
Scriptable o = (Scriptable) new javax.script.ScriptEngineManager().getEngineByExtension(”js”).eval(”$=” + json);
Buradan enlem ve boylam bilgilerini alalım:
Scriptable x = (Scriptable) ((Scriptable)((Scriptable) o.get(”_items”, null)).get(”Coordinates”, null)).get(”_items”, null);
System.out.println(x.get(”Latitude”, null));
System.out.println(x.get(”Longitude”, null));
Evet hepsi bu kadar. Bu bilgiye ulaştıktan sonra kendimize ziyaretçinin geldiği noktayı gösteren google frame’i olan bir web sayfası yapmak için bu bilgileri JSP içinde aldığımızı varsayarak aşağıdakikodu eklemeliyiz:
<iframe width=”425″ height=”350″ frameborder=”0″ scrolling=”no” marginheight=”0″ marginwidth=”0″ src=”http://maps.google.com/?ie=UTF8&ll=<%=latitude %>, <%=longitude%>&z=10&output=embed&s=AARTsJqzARj-Z8VnW5pkPMLMmZbqrJcYpw”></iframe>
İşte hepsi bu kadar hepimize afiyet olsun.
Social Bookmarking