Professional Documents
Culture Documents
<<
JavaScript-Java
kombine kullan›m›
Web programc›l›¤›n›n iki önemli teknolojisini daha etkileflimli uygulamalar yapmak için kombine
olarak kullanabilirsiniz.
S
tudioWeb’in daha ilk say›lar›ndan beri ço¤unun sand›¤›n›n ak- Bu ikisini birbiriyle dayan›flma ve etkileflim içinde kullanmak birbirle-
sine JavaScript ile Java’n›n iki farkl› teknoloji ve dil oldu¤unun, rinin dezavantajlar›n› bertaraf edece¤i gibi, web uygulamalar› aç›s›n-
benzerliklerinin sadece isimlerinden kaynakland›¤›n›n alt›n› dan yeni imkanlar› da beraberinde getirir.
her f›rsatta çiziyoruz. JavaScript bugün tüm web taray›c›lar taraf›n- Java ile JavaScript aras›ndaki bilgi aktar›m›n›n nas›l gerçeklefltirile-
dan desteklenen tek standart istemci tarafl› script dili olup web sayfa- bilece¤ine örnek olacak bir iki uygulamay› ele alal›m.
s›n›n tüm elementleriyle iletiflim kurabilen çok önemli bir teknoloji-
dir. JavaScipt’in web taray›c› üzerindeki hakimiyetine karfl›l›k baz› s›- JavaScript’ten Java’ya bilgi aktar›m›
n›rlamalar› söz konusudur. Mesela JavaScript’in grafik çizdirme des- Java applet’lerinize web sayfas›ndan bilgi aktar›m›n› HTML kodlar›n-
te¤i yoktur, kullan›c› tarafl› olmas›ndan dolay› da veritaban› uygula- daki parametrelerin d›fl›nda sayfa çal›fl›r durumda iken dinamik ola-
malar› gibi sunucu-taraf›na özgün ifllemleri yapamaz. Alternatifi ol- rak da gerçeklefltirebilirsiniz. JavaScript sayesinde ziyaretçi bizzat say-
mayan JavaScript’in sahip oldu¤u yetenekleri karfl›s›nda ço¤u tekno- fa üzerinden Java applet’ine bilgi aktar›labilir. Bu özelli¤i kullanarak
loji üretici firma ürünlerinin JavaScript ile konuflabilmesinin yollar›n› çeflitli uygulamalar gelifltirmek mümkün. Hayal gücünüze kalm›fl. Biz
aram›fllard›r. örne¤imizde applet içerisinde görünecek bir yaz›y› HTML sayfas›nda
JavaScript ile konuflabilen bir teknoloji bizzat üzerinde yer ald›¤› yer alan bir link yard›m›yla bizzat ziyaretçinin belirlemesini isteyece-
web sayfas›yla ya da web taray›c›yla konuflabilir hale gelir. Bu da say- ¤iz.
fan›n ziyaretçisiyle etkileflim ve iste¤ine uygun içeri¤i dinamik olarak Sayfam›zda kullan›lacak applet’in kaynak kodu afla¤›daki gibi ola-
oluflturma anlam›na gelir. Bu aç›dan bak›lacak olursa JavaScript’in bilir. Sayfam›zda kullan›lacak applet bu kodlar›n JSDK yaz›l›m paketi
web sayfalar› üzerinde sayfan›n kullanmas› muhtemel tüm teknoloji- ile derlenmesi sonucu oluflacak. Bilgisayar›n›zda JSDK yüklü de¤ilse
ler için bir çimento vazifesi gördü¤ü sonucunu ç›karabiliriz. Studi- CD’deki örnekleri al›p aynen kullanabilirsiniz ama applet’inizde de¤i-
oWeb’in önceki say›lar›nda Flash’in JavaScript ile iletiflimini konu alan fliklik yapamazs›n›z.
bir iki say›ya yer vermifltik. JavaScript’in di¤er web teknolojileriyle ile-
tiflimini göz önünde bulundurarak flu sonuca varabiliriz: E¤er JavaSc- Selamla.java
ript hem bir applet ile hem de bir Flash animasyonu ile konuflabiliyor- import java.awt.*;
sa, bir applet dolayl› yoldan Flash animasyonuyla konuflabilir. Bunun import java.applet.Applet;
tersi de geçerlidir. Java appletlerin çeflitli harici cihazlarla iletiflim ku-
rabildi¤ini düflünürsek ne derece çeflitli imkanlar›n olabilece¤ini gö- public class Selamla extends Applet
zünüzde canland›rabilirsiniz. {
Java’n›n ve JavaScript’in birbirinden farkl› özellikleri olmas›, birbi- String isim = "";
rinden farkl› avantajlar› ve dezavantajlar› bulundu¤u anlam›na gelir.
public void init() {
setBackground(Color.orange);
}
SelamlaJS.html
<html>
<head>
<title>JavaScript Java Kombinasyonu</title>
<meta http-equiv="Content-Type" content="text/html; p
charset=windows-1254">
<script language="JavaScript">
function isimSor() {
var isim;
isim = prompt("Isminizi girin lütfen","isim")
document.Appletimiz.yeniIsim(isim);
}
</script>
</head> Web sayfam›zda bir script, script’imizde de bir adet fonksiyon var.
isimSor(). Sayfaya ekli link t›kland›¤› anda fonksiyonumuz tetikleni-
<body bgcolor="#ffffff"> yor.
var secimNoRenkFon = Her iki seçim listesi de farkl› bir de¤er seçildi¤i anda ayn› renkDe-
‚document.KontrolPaneli.secenekFonRengi.selectedIndex; gistir() fonksiyonunu tetikliyorlar. fiimdi de fonksiyonumuzu görelim.
var renkFon =
‚document.KontrolPaneli.secenekYaziRengi[secimNoRenkFon].value; var secimNoRenkTekst = ‚document.KontrolPaneli.secenekYaziRengi.p
selectedIndex;
document.Appletimiz.renkYeniden(renkFon,renkTekst); sat›r› seçilen de¤erde de¤ifliklik oldu¤u anda listeden hangi indeks
} numaral› de¤erin seçildi¤ini belirleyip bir de¤iflkende sakl›yor.
nine at›yor. Bu durumda, mesela ilk liste eleman› seçildiyse indeks nu- private Color dizeyiRengeCevir(String c) {
maras› 0 olarak elde edilirken, renkTekst de¤iflkeninin de¤eri orange try {
olarak belirleniyor. if (c.equalsIgnoreCase("Black"))
Fon rengini belirleyen sat›rlar da ayn› prensipte çal›fl›yorlar ve bu- return Color.black;
radan elde edilen renk de renkFon de¤iflkenine kaydediliyor. Art›k elde else if (c.equalsIgnoreCase("White"))
edilen renk de¤erlerini applet’imize aktarmak için uygun Java meto- return Color.white;
dunun ad›n› ça¤›rabiliriz else if (c.equalsIgnoreCase("Red"))
return Color.red;
document.Appletimiz.renkYeniden(renkFon,renkTekst); else if (c.equalsIgnoreCase("Green"))
return Color.green;
fiimdi de appletimizin bu de¤erleri nas›l kulland›¤›n› görelim. else if (c.equalsIgnoreCase("Blue"))
return Color.blue;
Selamla2.java else if (c.equalsIgnoreCase("Yellow"))
import java.awt.*; return Color.yellow;
import java.applet.Applet; else if (c.equalsIgnoreCase("Orange"))
return Color.orange;
else if (c.equalsIgnoreCase("Pink"))
public class Selamla2 extends Applet return Color.pink;
{ else
String isim = ""; return Color.white;
Color fonRengi = Color.orange; }
Color tekstRengi = Color.black; catch (Exception e) {
return null;
public void init() { }
setBackground(Color.orange); }
} }
g.setColor(fonRengi);
g.fillRect(0,0,200,50);
g.setColor(tekstRengi);
g.setFont(f);
sat›rlar›nda kullanarak applet’imizin fon rengini ve yaz› rengini de- Script’imiz oldukça basit bir fonksiyondan olufluyor. Fonksiyon ise,
¤ifltirecek. ziyaretçi, flifre alan›na girifl bilgisini yaz›p butona t›klad›¤›nda devreye
giriyor. Öncelikle flifre alan›na bir de¤er girilip girilmedi¤ini kontrol
Java applet’i ile flifre kontrolü ediyoruz. E¤er bir de¤er girilmediyse script’imiz bunu bir mesaj
StudioWeb’in daha önceki say›lar›nda kullan›c› tarafl› JavaScript gibi kutusuyla ziyaretçiye iletecektir.
bir script diliyle flifre gibi güvenlik aç›s›ndan hassas uygulamalar
yapman›n uygun olmayaca¤›ndan bahsetmifltik. Bunun sebebini de if (document.Formumuz.Sifremiz.value != "") {
JavaScript kodlar›n›n ziyaretçi taraf›ndan aç›l›p okunabilmesinin ...
mümkün olmas› olarak göstermifltik. Java appletleri de kullan›c› ta- }
rafl› bir teknoloji olmalar›na karfl›l›k taray›c›daki JVM taraf›ndan yo- else {
rumlanan derlenmifl bytecode formunda class dosyalar› olmalar›n- alert("Bir de¤er girmediniz ki!");
dan dolay› basit flifre gibi uygulamalarda kullan›labilirler. fiifre ile }
saklanacak bilginizi bizzat applet’in içine yerlefltirip içinde göstere-
bilece¤iniz gibi, bir web sayfas›na koyup applet’lerden sadece flifre
geçerlili¤ini kontrol etmede faydalanabilirsiniz. Bu seferki JavaSc-
ript-Java kombinasyonu örne¤imiz ziyaretçiye flifre soracak, elde et-
ti¤i flifre geçerliyse uygun sayfa içeri¤ine yönlendirecek. Ziyaretçi
web sayfas›n›n kodlar›na baksa bile flifrenin ya da gidilecek sayfan›n
ne oldu¤unu bulamayacak.
Sifre.html
<html>
<head>
<title>JavaScript Java Kombinasyonu</title>
<meta http-equiv="Content-Type" content="text/html; p
charset=windows-1254">
<script language="JavaScript">
E¤er bir de¤er girildiyse bu önce bir de¤iflkene kaydediliyor. belirleyen ifllevselli¤e sahip. Applet’imize bu ifllevselli¤i katan sif-
var girilenDeger = document.Formumuz.Sifremiz.value ; reKontrol() metodu.
Sonra bu de¤er do¤rudan applet’imize gönderiliyor. Bundan son- public void sifreKontrol(String sifre) {
ras› ise tamamen applet’imizin kontrolünde if (sifre.equals("jsp")){
git("http://www.pusula.com/jsp");
Sifre.java }
import java.awt.*; else if (sifre.equals("dhtml")){
import java.applet.Applet; git("http://www.pusula.com/dhtml");
import java.net.*; }
else
public class Sifre extends Applet { {
mesaj="Geçersiz sifre! Tekrar deneyiniz..";
String mesaj = "Lütfen sifrenizi giriniz.."; }
repaint();
public void init() { }
setBackground(Color.white);
} Görüldü¤ü üzere kontrolü gerçeklefltiren metodumuz çok çok ba-
sit. Gayet sade bir if else kurgusuyla flifremiz “jsp” ise applet web say-
public void paint(Graphics g) fas›n› http://www.pusula.com/jsp adresine, “dhtml” ise
{ http://www.pusula.com/dhtml adresine yönlendiriyor. Bu iki flifre
Font f = new Font("Arial",Font.BOLD,14); d›fl›nda bir de¤er geçersiz olup bu durumda applet ziyaretçiye uygun
g.setFont(f); bir mesaj görüntülüyor.
g.setColor(Color.red); Numan Pekgöz
g.drawString("" + mesaj, 10 , 23); numanp@chip.com.tr
}
}
else
{
mesaj="Geçersiz sifre! Tekrar deneyiniz..";
}
repaint();
}
}
fiifre olarak jsp yaz›ld›¤›nda appletimiz karfl›l›k gelen sayfaya
Applet’imiz gidilecek web sayfas›n› girilen flifre de¤erine göre yönlendiriyor.
zun bir aradan sonra tekrar merha- vin çözümü ile ifle bafllayal›m. Hat›rlarsan›z fiimdi bu örne¤imizi biraz inceleyelim.
ArrayList S›n›f›:
Daha önce ö¤renmifl oldu¤umuz diziler ko-
nusundan bildi¤imiz gibi bir dizi yarat›ld›k-
tan sonra art›k otomatik olarak boyutu de-
¤iflmiyordu. Siz diziyi belirli bir uzunlukta
açt›ktan sonra dizinin tüm alanlar› doluysa,
yeni bir eleman eklemek için birtak›m algo-
ritmik yöntemler uygulaman›z gerekir. Ya
DecimalFormat s›n›f›n›n kullan›m› da diziden bir eleman ç›kard›¤›n›z zaman,
di¤er elemanlar› birer basmak geri kayd›r-
at ve long versiyonlar› da vard›r. mel türleri (integer, float, double gibi) mak gibi birtak›m iflleri de yapman›z gere-
int Math.random() 0 ile 1 aras›nda rastgele String türüne ya da tersine, String türünde- kir.
pozitif bir say› üretir ve bu de¤eri döndürür. ki bir ifadeyi temel türlere dönüfltürmektir. “ArrayList” s›n›f› bu tür görevleri otoma-
Asl›nda bu tür s›n›flara olan ihtiyac› örnek tik olarak yapan ve bize dinamik olarak kul-
DecimalFormat S›n›f›: üzerinde aç›klarsak daha anlafl›l›r olacakt›r. lanabilece¤imiz bir dizi mekanizmas› su-
Java ile yazd›¤›m›z programlarda say›sal Mesela en son yapt›¤›m›z “OndalikKi- nan bir s›n›ft›r. E¤er böyle bir diziye sahip
de¤erler ço¤u zaman anlafl›lmas› zor ve ge- sim” s›n›f› örne¤inde, 10. sat›rda tan›mla- olmak istiyorsan›z afla¤›daki flekilde bir “Ar-
reksiz uzunlukta üretilir. Ancak Java bizim nan “a” de¤iflkeni içerisindeki de¤erin bi- rayList” nesnesi tan›mlaman›z gerekir:
için say›n›n ne kadar uzunlukta olmas› ge- çimlendirilmifl hali String türünde elde edil-
rekti¤ini otomatik olarak bilemez ve bu ne- mektedir. Ancak biz bu biçimlendirilmifl hal ArrayList dinamikDizi = new ArrayList();
denle en do¤ru ve orjinal flekilleriyle bu de- ile baflka matematiksel ifllemler yapmak is-
¤erleri üretmektedir. E¤er yukar›daki örne- tedi¤imizde String türündeki bu sonuç ifli- Daha sonra bu nesneyi art›k kendi dizi-
¤i yaz›p çal›flt›rd›ysan›z, elde edilen sonuç- mize yaramayacakt›r. Bu sonucun tekrar niymifl gibi düflünerek “ArrayList” s›n›f›n›n
lar›n (aç› de¤erleri gibi) virgülden sonra ol- double türünde elde edilmesi gerekir. Bu- sundu¤u metodlar yard›m›yla eleman ekle-
dukça fazla miktarda basmak içerdi¤ini nun için String türünde elde edilen bu de- me, ç›kartma ve bulma gibi ifllemler yapabi-
görmüflsünüzdür. ¤er “Double.parseDouble” metodu ile tek- lirsiniz. Mesela “dinamikDizi” nesnesine
DecimalFormat s›n›f›, say›lar› istedi¤i- rar double türüne dönüfltürülebilir. Bu me- eleman eklemek için:
miz gibi ifade edebilmemize olanak sa¤lar. todun örnek kullan›m›:
Bu s›n›f›n kullan›m›na iliflkin bir örnek yaza- dinamikDizi.add(“merhaba”);
l›m: double yeniBicim = Double.parseDouble p
Örne¤imize dikkat edersek, “Decimal- (ikiHane.format(a)); ya da
Format” s›n›f›n› kullanmadan önce 4. sat›r-
da oldu¤u gibi “DecimalFormat.text.*” fleklinde olacakt›r. Bu dönüflümleri ya- int a = 3;
kütphanesini programa dahil etmeliyiz. 9. pan di¤er baz› sarg› s›n›flar› ve metotlar› da dinamikDizi.add(a);
String a = str.toString();
StringTokenizer
Vector
Enumaration
Dictionary
Character
Random
Stack
Properties
R. Erman Aykaç