Ajax

ajax, java June 12th, 2007

Doomy

Java ile Ajax nasıl yazılır?

AJAX deyince aklınıza ne geliyor bilmiyorum ama benim ne kadar nerd olmama rağmen futbol takımı geliyor. Ha hazır futbol demişken burdan hemen Jasfid ve Vinnie kardeşlerime yerleştireyim :) Doomdeath 2 - Geri kalan manyaklar 0 :) AJAX deyince o kadar ok kafam karışıyordu ki. Size öyle bir döküman yazdım ki oha bu muymuş bu kadar kolay mı? diyeceksiniz. Haydi başlayalım.

AJAX nedir? - Asynchronous JavaScript Technology and XML
Ne işe yarar - çok işe yarar ama en belirgin bugün de özelliğini yapacağımız uygulama olarak sayfayı tamamen yenilemeden belli bir kısım veriyi serverdan alarak sayfayı değiştirmeye yarar.

Şimdi bunları not edelim mantık bundan ibarettir.
1. Istemcide bir olay olur.(HAREKET YAPMA)
2. XMLHttpRequest objesi oluşturulur.
3. XMLHttpRequest objesi bir çağrım yapar.
4. Istem bir servlet tarafından karşılanır.
5. Servlet bir XML dökümanı ieren sonucu geri dner.
6. XMLHttpRequest objesi callback() fonksiyonunu cağırr.
7. HTML DOM yenilenir. (KRALINI GöRüRSüN)
Ben buna hareket yapma kralını görürsün diyorum ki çok akılda kalıcı .)

Evet Şimdi ne yapıcağız. Bir tane jsp bir tane servlet oluşturalım. index.jsp

<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″>
<title>JSP Page</title>

<script language=”JavaScript”>

var req; //request değişkeni tanımlandı.

function validate() {
var idField = document.getElementById(”userid”); /userid attribute alındı.
var url = “validate?id=” + encodeURIComponent(idField.value); //url validate?id=xxx şekline geldi
if (typeof XMLHttpRequest != “undefined”) {
req = new XMLHttpRequest();
} else if (window.ActiveXObject) {
req = new ActiveXObject(”Microsoft.XMLHTTP”);
}
req.open(”GET”, url, true); //url yani servlet get methodu yapılıyor
req.onreadystatechange = callback; // donus olduğunda callback fonksiyonu çağrılıyor
req.send(null);
}

function callback() {
if (req.readyState == 4) {
if (req.status == 200) {
var message = req.responseXML.getElementsByTagName(”message”)[0]; //dönen xml den veri alındı
setMessage(message.childNodes[0].nodeValue); // alınan veri bu methoda yollanıp HTML DOM updatelendi
}
}
}

function setMessage(message) {
var mdiv = document.getElementById(”userIdMessage”); //önceden ayarlanan div alındı.
if (message == “invalid”) {
mdiv.innerHTML = “<div style=\”color:red\”>Invalid User Id</ div>”;
} else {
mdiv.innerHTML = “<div style=\”color:green\”>Valid User Id</ div>”;
}
}

</script>

</head>
<body>
test yapalım.
<input type=”text” size=”20″ id=”userid” name=”id” onkeyup=”validate();”>

<div id=”userIdMessage”></div> //HTML DOM iin updatelencek kısım önceden burda bulunduruldu.
</body>
</html>

servlet

/*
* Validate.java
*
* Created on March 5, 2007, 1:32 PM
*/

import java.io.*;
import java.net.*;

import javax.servlet.*;
import javax.servlet.http.*;

/**
*
* @author doomy
* @version
*/
public class Validate extends HttpServlet {

private ServletContext context;
private java.util.HashMap users = new java.util.HashMap();

public void init(ServletConfig config) throws ServletException {
super.init(config);
this.context = config.getServletContext();
users.put(”greg”,”account data”);
users.put(”duke”,”account data”);
}

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {

String targetId = request.getParameter(”id”);

if ((targetId != null) && !users.containsKey(targetId.trim())) { // (greg or duke) değil ise
response.setContentType(”text/xml”);
response.setHeader(”Cache-Control”, “no-cache”);
response.getWriter().write(”<message>valid</message>”);
} else {
response.setContentType(”text/xml”);
response.setHeader(”Cache-Control”, “no-cache”);
response.getWriter().write(”<message>invalid</message>”);
}
}
}

Şimdi anlatalım. textbox ın onkeyup actionı gerekleştiğinde validate fonksiyonunu çağırır. Bu fonksiyon userid parametreli kısımm yani textboxın değerini alır validate servletine gönderir. Burdan sonuc XML olarak geri gönderilir. Bu işlem gerçekleşince ise callback fonksiyonu çağrılır.
Callback fonksiyonu ise gelen XML dkmanının message tagli elemanın değerini alır. setMessage fonskiyonuna gönderir. Bu fonksiyon ise HTTP DOM ile sayfayı updateler. Bu updatelenme sırasında tüm sayfa updatelenmez sadece ilgili div updatelenir.


Social Bookmarking
Add to: Mr. Wong Add to: Digg Add to: Del.icio.us Add to: Reddit Add to: StumbleUpon Add to: Slashdot Add to: Netscape Add to: Furl Add to: Yahoo Add to: Google Add to: Technorati Add to: Newsvine Add to: Ma.Gnolia



Başka Manyak Konular


Lütfen Yorumlarınızı bizimle paylaşın.

5 Responses to “Ajax”

  1. javinia Says:

    Oha, bu muymuş?
    Bu kadar kolay mı?

  2. admin Says:

    teknik olarak mantık bundan ibaret. Evet “Manyak” di mi :)

  3. javamanyagi Says:

    guzel anlatim tesekkurler ama ben calistirdigimda sadece invalid yaziyor input kutusu dahi yok

    targetId null gorunuyor

  4. jasfid Says:

    http://java.manyaklari.org/2008/07/zk-ajax-and-mobile-framework.jsp

    bence buna bakın :)

  5. baska bi manyak Says:

    bu siteyi yeni gordum bu yazi da cok isime yariycak.
    ben de diyordum bi ben miyim java diye tutturan. demek manyaklık derecesinde javacı olan baskaları da varmıs :)

Leave a Reply

Site Navigation

Categories

Archives

Meta

Recent Enteries

Recent Comments

FireStats iconPowered by FireStats