Java sayesinde; animasyonlar, kayan yazılar,
web sayfalarında chat, hesap makinesi, oyunlar, şifreleme programları,
interaktif web sayfaları, müzik, kelime işlemci, küçük internet appletleri,
kocaman paket programlar, resim işleme programları, tercüme programları,
sipariş sistemleri, saatler, yazım kontrol programları yapılabilir.
HTML'de Java
Bir applet hazırladığınızda, bunu bir HTML
dökümanına yerleştirmelisiniz. HTML 3.2 ile birlikte, Java appletlerin
kullanılmasını sağlayan iki yeni eleman çıktı. Bunlar APPLET ve PARAM. Diğer
HTML elemanları gibi bu iki elemanın da birçok özellikleri mevcuttur. Fakat
ideali, sadece gerekli olan özelliklerin kullanılmasıdır.
APPLET Elemanının kullanılması
APPLET elemanı, HTML dökümanına
yerleştirdiğiniz appletin tanımlanmasını ve özelliklerinin tanımlanmasını
sağlar. Her HTML elemanı gibi, APPLET elemanının da bir başlangıç tagı
ve bitiş tagı vardır.
APPLET elemanı için gerekli olan özellikler:
CODE, WIDTH ve HEIGHT'tir. CODE özelliği kullanılacak appleti, WIDTH özelliği
appletin genişliğini (pixel), HEIGHT özelliği ise appletin yüksekliğini (pixel)
belirlemenizi sağlar. Aşağıda gerekli olan özellikleri ile bir appletin HTML
dökümanına bağlanmış şeklini görüyorsunuz.
Maximum Bilgi
Yukarıdaki örnekte HTML dökümanı ve
"maximumbilgi.class" adlı java appleti aynı dizinde bulunmalıdırlar.
Şayet java appleti farklı bir dizinde ise, opsiyonel CODEBASE özelliğini
kullanmanız gerekir.
CODEBASE özelliği, appletin bulunduğu URL‘yi
belirtmenizi sağlar. Aşağıdaki örnek, yukarıdaki örneğin hemen hemen aynısıdır.
Tek farkı, java appleti başka bir dizinde bulunduğu varsayılarak CODEBASE
özelliği kullanılmıştır.
Maximum Bilgi
Diğer opsiyonel özellikleri şöyle
sıralayabiliriz:
ALIGN
Appletin konumunu belirlemizi sağlar.
Alabileceği değerler ABSBOTTOM, ABSMIDDLE, BASELINE, BOTTOM, CENTER, LEFT,
MIDDLE, RIGHT, TEXTTOP, TOP'tır.
HSPACE
Appletin altında ve üstünde ne kadar boşluk
bırakabileceğinizi belirleyebilirsiniz. HSPACE‘e vereceğiniz değer, pixel
olarak işlenir. Örnek: HSPACE=10
VSPACE
Appletin sağında ve solunda ne kadar boşluk
bırakabileceğinizi belirleyebilirsiniz. VSPACE‘e vereceğiniz değer pixel olarak
işlenir. Örnek: VSPACE=20
ALT
Appletleri gösteremeyen browserlarda, appletin
yerine alternatif bir yazı çıkmasını sağlayabilirsiniz.
NAME
Applete bir isim vermenizi sağlar.
PARAM Elemanının kullanılması
PARAM elemanı ile applete parametre
gönderebilirsiniz. PARAM elemanının sadece başlangıç tagı vardır:
. Applete göndermek istediğiniz her parametre için bir
tagı kullanmalısınız. PARAM taglarını başlangıç tagı
ile bitiş tagı arasına yerleştirmelisiniz.
Appletler, tagında belirtilen
parametrelere "getparameter()" metodu ile ulaşırlar.
tagının gerekli iki özelliği vardır. NAME ve VALUE. NAME özelliği ile
parametrenin adı belirtilir ki "getparameter" metodu ile bu isme göre
aranır. VALUE özelliği ise parametrenin değerini verir. Aşağıda, applette
kullanılacak resmi, parametre ile girilen bir HTML dökümanı örneği verilmiştir.
Maximum Bilgi
Java appletinde, resim parametresinin değeri;
Resim_logo=getparameter("Resim") komutu ile okunur.
Veri Tipleri
Java'da her şey bir nesnedir. Tek istisna veri
tipleridir. Java veri tipleri, bütün platformlarda standart büyüklüğe sahiptir.
Bu standart Java'nın taşınabilirliğini sağlıyor. Aşağıda Java'da bulunan veri
tipleri ve büyüklükleri listelenmiştir.
Veri tipi
Büyüklük
byte
8-bit
short
16-bit
int
32-bit
long
64-bit
float
32-bit kayan nokta
double
64-bit kayan nokta
char
16-bit Unicode
Eğer C/C++ programcısı iseniz "unsigned" tipinin olmadığı dikkatinizi
çekmiştir. Byte tipi ise C/C++'daki "char" tipinin yerini almıştır.
Java'daki char tipi 16 bittir. Çünkü Java karakter verisinde Unicode karakter
setini temel alır.
Unicode, uluslararası karakterleri destekleyen
bir standarttır. Programlarınızın değişik platformlarda ve ülkelerde
çalıştırılacağındaUnicode çok uygundur. Yukarıdaki tabloda olmayan diğer bir veri
tipi ise boolean
'dır. Bir boolean, değişken numerik değere çevrilemez ve
sadece iki değer alabilir. Bu değerler "true" ve "false"
tur.
Literaller
Literaller, değişkenlere değer atamak için
kullanılır. Integer'lara C/C++ benzer biçimde değer atanır. 25 gibi tamsayı
atayabilirsiniz. Hexadecimal bir tamsayı atamak için, sayının önüne
"0x" ifadesi koymanız gerekir. Örneğin, 15 sayısını hexadecimal
olarak 0xF şeklinde atamalısınız. 8'lik tabanda bir sayı atamak için
"0" ifadesini, sayının önüne koymalısınız.
Kayan noktalı sayıları ise direkt 5.2345
şeklinde atayabilirsiniz. Bunlar 32 bit float veya 64 bit double olarak
saklanabilirler. Belirtmezseniz, varsayılan 64 bit double'dır. Belirtmek için
yapacağınız tek şey, sayının arkasına float için F, double için D koymaktır.
Örneğin 5.323 F veya 5.323 D.
Karakterler, tek tırnak içinde atanırlar.
Örneğin 'a'gibi. Escape karakterleri için slash (\) kullanılır. Bunlar da
tırnak içinde belirtilir. \t=tab, \n=satır atlama gibi. Stringler için çift
tırnak kullanılır. "Maximum Bilgi" gibi. Satır atlaması yapmak
istiyorsanız "Maximum Bilgi \n" kullanmalısınız.
Değişkenler
Java'da 3 tip değişken vardır: instance, class
ve local. Lokal değişkenler, metodların ve blokların içinde tanımlanabilirler.
Blok, "{" ile başlayan ve "}" ile biten ifadeler
topluluğudur. Blok içinde tanımlanan lokal değişkenler, blok sonuna kadar
geçerlidir. Genel formatı şeklindedir. Örneğin
double tipinde pi adlı değişkeni tanımlayalım: double pi; bir değer de
atayabilirdik: double pi=3.1415.
Değişkenler; harf, sayı, dolar işareti, alt
çizgi ile başlayıp bu karakterlerle devam edebilir. Ama komutlar, operatörler
değişken ismi olarak kullanılamazlar.
Açıklamalar
Programlarınıza açıklama koymak için, Java'da
kullanabileceğiniz iki stil vardır. Birincisi çift slash ( // ). Çift slash'tan
satır sonuna kadar olan kısımda bulunan her şey açıklama olarak kabul edilir.
İkincisi ise slash ve yıldız ( /*) ile başlar
yıldız ve slash ile biter. Bunlar arasındaki her şey, açıklama olarak kabul
edilir. Örnek 1: double pi; // pi değişkeni double olarak tanımlandı. Örnek 1:
/* Bu programın amacı sayısal loto tahmini yapmaktır.
Operatörler
Java'da bulunan operatörler aşağıdaki tabloda
verilmiştir.
Kategori
Operatör
Aritmetik
+ - * / %
İlişkisel
>= <= == !=
&& ||
Bit işlemeri
& | ^ << >>
>>> ~ &= |= ^=
Artırma
++
Azaltma
--
Aşağıda iki değişken tanımlanıp, bunlara değer
atanıyor. Daha sonra ise bu iki değişkenin içeriği toplanıyor:
int x,y ;
x= 3 ;
y=4 ;
int z=x+y ;
Z 'nin değeri yedidir. Operatörlerin öncelik
sırası aşağıdaki tabloda gösterilmiştir.
[] ()
++ - ! ~
* / %
+ -
<< >> >>>
=
== !=
& ^
|
&&
||
= ve diğerleri
Bit işlemleri
Ayrılmış Kelimeler
Aşağıdaki tabloda, Java'nın komutları olarak
kullanılan kelimeler listelenmiştir. Bu kelimeler, Java için ayrılmıştır. Yani
bu kelimeleri değişken ismi gibi şeyler için kullanamazsınız. Bunlar sınıf
tanımlaması, değişken tipi belirleme, koşul, döngü gibi işlemler için
kullanılır.
Abstract
boolean
break
byte
byvalue
case
catch
char
class
const
continue
default
do
double
else
extends
false
final
finally
float
for
goto
if
implements
import
instanceof
int
interface
long
native
new
null
package
private
protected
public
return
short
static
super
switch
synchronized
this
threadsafe
throw
transient
true
try
void
while
Karşılaştırmalar
Karşılaştırmalar, genelde bir karşılaştırmanın
sonucuna göre belirtilen komut veya komutları çalıştırırlar. Eğer birden fazla
komut kullanılacak ise blok içinde olmalıdır. Tek bir komut için buna gerek
yoktur. Örneğin; a değişkenin değerinin bir olup olmadığını kontrol ediyoruz.
Eğer a=1 ise a=2, değil ise a=1.
Görüldüğü üzere karşılaştırma, boolean bir
değer döndürmelidir. Yani true (doğru) veya false (yanlış) değerini
döndürmelidir ki bu değere göre işlenecek komutlar belirlenebilsin. Java'da
karşılaştırma yapmak için "if...else..." kullanılır. Formatı şu
şekildedir:
if (karşılaştırma)
{ karşılaştırmanın sonucu
doğru ise işlencek komutlar
}
else
{ karşılaştırmanın sonucu
yanlış ise işlencek komutlar
}
Yukarıdaki örneği java formatında yazarsak :
if (a==1) // Java'da = operatörü atama için kullanılır.
// Karşılaştırma için == operatörünü kullanılır.
a=2;
else
a=1; // Tek komut olduğu için blok içine alınmasına gerek
yoktur.
Eğer birçok karşılaştırma varsa, iç içe
karşılaştırmalar (if ) kullanılabilir. Sonucu nümerik olan karşılaştırmalar
için "switch...case..." komutu kullanılır. Bu komut, sadece nümerik
değerler için kullanılır. Formatı şu şekildedir:
switch (değişken)
{
case 1: // değişkenin değeri 1 ise
break;
case 2:{
// değişkenin değeri 2 ise
break;
}
default: // yukarıdaki değerler haricindeki değer ise
break;
}
Döngüler
Java 'da üç tane döngü işlemi vardır.
"for" döngüsünün yapısı aşağıdaki şekildedir. for (ilk değer; test;
değer artırma/azaltma) Bu yapıda görülen ilk değer ifadesi, değişkeninizin
alacağı ilk değerdir. Test ifadesinde ise basit veya kompleks bir karşılaştırma
kullanabilrisiniz. Değer arttırma veya azaltma ise değişkeninizin o anki
değerini değiştirecek bir ifadedir. "for" döngüsünü örnek kullanımı:
for (sayac=0;sayac<3;sayac++)
Bu örnekte, sayaç değişkenine ilk değer olarak
sıfır verilmiş ve her döngüde bir arttırılması istenmiş. Döngüden çıkma koşulu
ise sayaç değişkeninin 3 ve daha yukarı değerleri olarak belirlenmiş. Bu
durumda sayaç değişkeni 0,1,2 değerleri için döngüye girecektir.
"for" döngüsünden sonra bir komut veya blok komutları gelebilir.
"while" döngüsünün yapısı şu şekildedir: while (test). Test ifadesi
"for" döngüsündeki ile eşdeğerdir. Örnek:
sayac=0;
while (sayac<3)
{
//komutlar
sayac++;
}
"do" döngüsünün yapısı:
do
{
//komutlar
} while (test);
"do" döngüsünün "while"
döngüsünden farkı en az bir kere döngüye girmesidir.
Tüm döngülerde "break" komutu
döngüden çıkılmasını, "continue" komutu ise bir sonraki değere geçmeyi
sağlar.
Diziler
Java'da diziler nesnedirler, C'deki gibi
hafızada yer kaplayan pointer değillerdir. Java 'da diziler, C 'ye göre daha
güvenilirdir. Dizilerin elemanlarına gelişigüzel değerler atayamazsınız. Java,
dizi elemanlarını sırasıyla kontrol eder. Dolayısıyla arada değer atanmamış bir
elemana rastlanırsa hata oluşur. Bu da C'de çıkan hafıza bozulmalarını önler.Java'da dizi
kullanmak için ilk önce dizinin tipi verilir. Tip verilirken dizinin büyüklüğü
belirtilmez.
int numbers[]; // Integer diziler için
String myStrings[]; // String diziler için
Diğer metod ise tipin arkasına köşeli parantez koymaktır.
String[] myStrings; // String diziler için
İkisi de tanımlamada aynıdır. Her ikisi de
kullanılabilir. Size hangisi daha kolay geliyorsa onu kullanın. Java dizileri
örneklerden de görüldüğü üzere tüm veri tipleri için kullanılabilir.Sonraki adım ise
dizinin "new" operatörü kullanılarak yaratılmasında, bu adımda
dizinin büyüklüğü de belirtilir.
int numbers[] = new int[5]; // 5 büyüklüğünde integer dizi
String myStrings[] = new String[20]; // 20 büyüklüğünde string dizi.
Bu adımdan sonra diziler yaratılmış oldu.
Dizinin her bir elemanına varsayılan değer atanır. Varsayılan değerler integer
veri tipi için "0 (sıfır)", string veri tipi için "null" değeridir.
Dizi elemanlarına bu adımdan sonra değer atamak çok kolaydır. C++ 'da olduğu
gibi Java 'da da dizilerin elemanları sıfırdan başlayan tamsayı değerleridir.
Dizinin ilk elemanına değer atamak için:
myStrings[0] = "ilk dizim";
numbers[0] = 10;
Java'da bir dizinin eleman sayısını
(büyüklüğü) bulmak için "length" metodu kullanılır. Bu metodun
döndürdüğü değer "int" tipindedir.
int boyut=numbers.length // boyut=5 olur
Java'da çok boyutlu diziler yoktur. Fakat bu
tür diziler dizi içinde dizi oluşturularak simüle edilebilir.
int k[][] = new int[5][4]; // 5-4 boyutunda bir dizi
k[1][3] = 999; // Değer atama
Bilgi Alma ve Yazdırma
Ekrandan bilgi almak için BufferReader
sınıfını kullanacağız. BufferReader giris=new BufferReader( new
InputStreamReader (System.in)); Bu sınıfın readLine() metodunu kullanarak
bilgiyi alıyoruz:
try-catch bloğu olası bir hatayı yakalamak
için kullanılıyor. Eğer bir hata oluşursa hatayı ekrana yazacak. Şimdi de
girileni yazdıralım. Ekran birşey yazdırmak için System.out sınıfının println
metodunu kullanacağız :
System.out.println ("Girdiğiniz şey : " +
girilen );
println metodu ekrana verilen parametredeki
yazıyı yazdıktan sonra imleci bir alt satıra geçirir. Şayet imlecin bir alt
satıra geçmesini istemiyorsanız print metodunu kullanın. Ama bu metodu
kullandığınızda ekrana bilginin çıkması için akabinde flush metodunuda
kullanmalısınız. Şu şekilde :
System.out.print("Ali ");
System.out.flush();
Java Sertifikası
Java internet ortamına girdiğinde, javayı
destekleyen browserlardaki buglar yüzünden çoğu kullanıcı java özelliğini
kapatmak durumunda kalmıştı. Günümüzde javanın güvenliği artmış durumda. Bunda
browserların buglarının azalmasının rolü olduğu gibi sertifika kavramınında
büyük rolü vardır.
Sertikasız/İşaretsiz Appletler Neler
Yapabilir?
Kullanıcıların bilgisayarında istenmeyen
işlemlerin yapılmasını engellemek için, her browserın güvenlik sınırlamaları
vardır. Bu güvenlik sınırlamasının türü browsera göre değişir. Günümüzdeki
browserların java appletlerin için aşağıdaki güvenlik sınırlamaları vardır:
- Appletler kullanıcının bilgisayarından veri
okumaz ve yazamazlar.
- Kullanıcının bilgisayarında program çalıştıramazlar.
- Ağ bağlantısı sadece appletin bulunduğu server ile kurulabilir.
- Sistem ayarlarını değiştiremezler.
Bu güvenlik sınırlamalarına bakıldığı zaman
normal bir applet sadece grafik veya yazı gösterme, ses ve animasyon
işlemlerini yapabilir. Büyük işler için normal appletler uygun değildir ki
küçük bir veri girişi dahi olamadan dişe dokunur uygulama yapmak mümkün
değildir.
Sertifikalı ve İşaretli Nedi?
Appletlerin web sayfalarını daha görsel hale
getirmekten başka bir işe yaramadığı çabuk anlaşıldı. Ama daha fazlasını;
mesela kulanıcıdan bilgi almak ve yazmak; yapabilmek için güvenlik
sınırlamalarını kaldırmak gerekiyordu. Fakat bunun mümkün olduğu güvenli olması
için, appletler yeni browserlar için işaretlenebiliyor.
Bunun için applet geliştiricisinin amacını
belirten sertifaya ihtiyacı vardır. Sertifa browser okuyabileceği şekilde
açıktır ve geliştiricinin adını ve kontrol kodu içerir. Bu sertifaka ile
geliştirici appleti güvenli olarak işaretler. Başka hiç kimse bu sertifikayı
kullanarak bir appleti işaretletyemez. Çünkü geliştirici appleti işaretlemek
için sertifika ile birlikte verilen özel kodu kullanır.
Kullanıcı, appleti çalıştırdığında ( applet
olan bir web sayfasını çağırdığında ) browser appletin işareti ile sertifikayı
karşılaştırır. Böylece appletin işareti sertifaka ile uyumlu ise çalıştırır. Bu
şu anlama geliyor: Doğru işaretli bir appletin geliştiricisini kullanıcı applet
yüklenirken görür. Ama sadece applet yüklenirken.
İşaretli Appletler Neler Yapabilir?
İşaretli bir applet yüklendiğinde kullanıcının
karşısına bir pencere gelir. Bu pencerede sertifika hakkında bilgiler vardır ve
kullanıcı onayı istenir. Kullanıcı bu bilgiler ışığında appletin çalışmasına
izin verir veya vermez. Kullanıcının çalışmasını onaylamış bir applet normal
programların yapabildiği her şeyi yapabilir.
Bu Durumdaki Güvenlik
Buradaki problem onaylama işleminin ya hep ya
hiç mantığında işlemesidir. Bunun anlamı onayladığınız bir appletin gerçek
amacının dışındaki verileride okuyabildiği veya istenmeyen bir yere veri
yazabildiğidir. Tam anlamıyla erişim haklarının belirlenmesi programcılara ağır
geldiği için çoğu programcı tarafından yapılmıyor. Yine de Microsoft ve
Netscape'in browserları için erişim haklarının değişik şekilde belirlenmesi
karşısında programcılar minimum düzeyde erişim hakkıyle yetiniyorlar.
İkinci bir problem ise sertifikanın
gerçekliğidir. Gerçek sertifikalar, programcı tarafından değil, programcının
güvenilirliğine kefil olan şirketler tarafından oluşturulmuş sertifikalardır.
Bu şirtketler para karşılığında sertifika oluşturmaktadır. Bir sertifika en az
$200 başlayıp sertifikaya göre artmaktadır. Programcı yıllık olarak $100
başlayan fiyatlarıda ödemek zorundadır. Çoğu programcı için bu fiyatlar aşırı
pahalı gelmektedir.
En azından herkes bedava kendi sertifasını
oluşturabilir. Fakat böyle bir sertifa, programcının gerçekte kim olduğunu ve
amacının doğruluğunu belirtmez. Hatta test sertifikaları diye anılanlar istenen
herhangi bir isim ile oluşturulabilir. Her ne kadar insanı korkutsada,
bilinmeyen bir shareware programı denemekten daha güvenlidir. Appleti onaylamak
veya onaylamamak bizim elimizde değil mi?
Sertika Şirketleri
Gerçek sertifakalar sertifa şirketleri (
Certificate Authority kısa CA ) tarafından veriliyor. Bu şirketler
programncının yada şirketlerin amacını kontrol ettikten sonra sertifika
veriyorlar. En tanınmış sertifika şirketleri
VeriSign,
Thawte ve
BelSign.
Her CA, vereceği sertifikaları kendi
sertifikası altına tanımlar ki daha önceden güvenliğ belirlenmiş kendi
sertifikaları gibi işlem grösünler. CA'lar kendilerine ait sertifikaları daha
önceden browserlara tanımlanmış ve kurulmuştur. Maalesef bu şirketlerin
verdikleri hizmetin bedeli yüksek. Bir defaya mahsus ücret $200 dan başlıyor,
yıllık ücretler ise 100$ dan. Şuana kadar işaretli appletlerın
yaygınlaşmamasının en büyük nedeni bu olsa gerek.
Test Setifikaları
Test sertifikası herkes tarafından beş kuruş
ödenmeden oluşturulabilen sertifikalardır. Ama programcının amacını gerçek
olarak ispatlamayan sertifikalar bunlar. Bu sertifikalarda browsera göre
değişiyor. Bir Netscape ve birde Microsoft için oluşturmak gerekiyor. Sun'ın
HotJava browserına hiç girmeyeceğim burda, belki ileride onuda ele alırım.
Microsoft Browser İçin Test Sertifakası
Microsoft browser sertifikası oluşturmak için,
Microsoft'un sitesinden bedava indirebileceğiniz "
Software Developer's
Kit ( SDK) " e ihtiyacınız var. Bu yazılım kitinin içindeki
programların tek tek indirilememesi tabii ki çok kötü bir durum. Bu kitin
içindeki herhangi bir program için 20 MB büyüklüğündeki bu kiti indirmek
zorunda kalıyorsunuz. Ama bu kiti CD olarakta sipariş edebiliyorsunuz.
Bu kit ile gelen ingilizce dökümantasyon tam
olarak okunmalı, nitekim olmazsa olmaz birçok önemli parametre mevcut. Burada
bu kitin içindeki DOS programlarıyla sertifika oluşturulmasını kısaca anlatmaya
çalışacağım. Bu sadece başlangıç için yardım niteliğindedir. Gerisini dökümana
bırakıyorum.
makecert ile Private/Public Key oluşturun.
Sertifika için gerekli olan .cer uzantılı bir dosya oluşacaktır.
cerrt2spc ile sertifikayı
oluşturun. Birinci adımda oluşturduğunuz .cer uzantılı dosyadan .spc uzantılı
bir dosya oluşturur.
cabarc ile class dosyalarınızı cab dosyası
haline getirin. Bu cab dosyası Internet Explorer tarafından indirilecek
dosyadır.
Oluşturduğunuz cab dosyasını
signcode
ile işaretleyin. Bu işlem sırasında oluşturduğunuz .spc uzantılı dosyada
kullanılacaktır.
Netscape Browser İçin Test Sertifakası
Netscape programcıların işini biraz daha
kolaylaştırmış Microsoft'a göre, sertifika için gerekli olan
"Signtool" uğraşmadan indirebilecek ve Microsoft'un kitine göre daha
kolay kullanımı var. Signtool Win95 ve Unix sürümleri var. Kısaca adımlar:
<!--
[if !supportLists]
-->
·
<!--
[endif]
-->
signtool ile Private ve Public Key oluşturmak için -G
parametresini kullanın.
<!--
[if !supportLists]
-->
·
<!--
[endif]
-->
Bu işlem ile x509.cacert adlı bir dosya oluşacaktır.
<!--
[if !supportLists]
-->
·
<!--
[endif]
-->
signtool ile class dosyalarınızı jar dosyası haline getirin.
Bu işlemleri batch dosyası ile de
yapabilirsiniz.
JAVA PLUG-IN
Bundan birkaç yıl önce Sun, HotJava adlı web
browserı piyasaya çıkardı. Sun'ın bu web browserı, Java'yı destekliyordu. Buda
içine java nesneleri gömülebilen uygulamaların ilk örneğini teşkil ediyordu.
Bunun ardından Netscape kendi web browserınada Java desteğini ekledi. Ardından
da MS.
Gün geçtikce Java'nın yeni sürümleri çıktı.
Bununla birlikte Netscape ve MS kendi ihtiyaçlarına uygun sınıf kütüphanelerini
eklediler browserlarına. Böylece her browserın kendine özel JVM ( Java Virtual
Machine ) 'i oldu. Dolayısıyla browserların içine gömülen JVM ile browserdan
bağımsız olarak JVM 'i güncellemek imkansızdı.
Sun, herhangi bir ortamda Java'nın
çalışabilmesi için gerekli olan her şeyi içeren ( Java VM ve sınıf
kütüphaneleri ) JRE 'yi çıkardı. Eğer JRE bilgisayarınızda yüklüyse, herhangi
bir uygulamaya ( örneğin browser ) gömülmüş java nesneleri çalışabiyor. Sorun,
browserların sadece kendi JVM lerine bakmaları ve makinada yüklü olan JRE 'ye
ulaşmak için bir mekanizmaya sahip olmamalarıydı. Sun olaya el attı : Java
Plug-In
Sun'ın geliştirdiği Java Plug-In, JRE 'ye HTML
sayfalarından browserı kullanarak ulaşmak için bir mekanizma. Java Plug-In,
Sun'ın web sitesinden bedavaya
indirilebiliyor. Sayfaya girildiğinde, istenen java sürümü kullanıcının
makinasında yüklü değilse, kullanıcı Java Plug-In sayfasına yönlendirilir. Java
Plug-In, Netscape'de plug-in olarak, IE 'de ise ActiveX Control olarak otomatik
yüklenir.
Java Plug-In Kullanmak
Java Plug-In, Netscape'de EMBED, IE 'de ise
OBJECT tagı sayesinde kullanılabilir. MIME tipi ile istenen java sürümünü
belirtmelisiniz. Örneğin Java 1.2 sürümünün özelliklerini kullanan bir
appletiniz varsa, MIME tipinde bunu belirterek appletinizin doğru çalışmasını
sağlarsınız.
MIME Tipi
Nesne Tipi / Sürüm
application/x-java-applet;
Applet / Mevcut sürüm
application/x-java-applet;version=1.1
Applet / Java 1.1
application/x-java-applet;version=1.2
Applet / Java 1.2
application/x-java-bean;
Bean / Mevcut sürüm
application/x-java-bean;version=1.1
Bean / Java 1.1
HTML sayfasına appletinizi geleneksel
yöntemlerle koymak isterseniz, yani Java Plug-In kullanmak istemiyorsanız
APPLET tagını kullanmanız gerekir. Java Plug-In kullanmak istiyorsanız;
Netscape için EMBED tagını kullanmalısınız :
Applet Desteklenmiyor
PLUGINSPAGE ve TYPE alt tagını kullanmanız
gerektiğini unutmayınız. Çünkü browser Java Plug-In yükleme sayfasını ve sürümü
bilmesi gerekir. APPLET tagında kullanılan PARAM alt tagını bu durumda
kullanmazsınız. Parametreleri direkt, örnekte görüldüğü gibi (
parametre1="2") direkt yazmalısınız.CODE, CODEBASE,WIDTH,HEIGHT gibi
alt taglar APPLET tagında olduğu gibi kullanılır.
Internet Explorer için OBJECT tagını
kullanmalısınız :
Applet desteklenmiyor
Burada CODEBASE alt tagı gömülü nesnenin gerektirdiği ActiveX Controlünün
yeridir. Java'ya ait codebase, type, code gibi taglar PARAM alt tagı ile
belirtilir.
Netscape ve IE için farklı yöntemlerin
kullanılması, her biri için ayrı web sayfalarımız olacağı anlamına gelmiyor.
HTML kodu kullanarak her ikisi içinde geçerli bir sayfa hazırlayabilirsiniz.
Fakat böyle bir HTML kodu yazmak için kendinizi kasmayın. Çünkü Sun, Java
Plug-In ile beraber HTML Çeviricisi ( HTML Converter ) sunuyor. Bu çevirici
sayesinde HTML sayfasında kullanılan APPLET tagları her iki browserda da
kullanılabilecek şekilde çevriliyor.
Applet Neden Çalışmıyor?
Appletler, dinamik web tabanlı içerik için en
ideal programcıklardır. Teorikte bir kere yaz, her bilgisayarda, her browserda
ve her işletim sisteminde çalıştır; mantığını ileri süren Sun bunu "Bir
kere yaz, her yerde çalıştır ( Run Once, Run Anywhere ) " sloganıyla lanse
ediyor.
Pratikte, birçok java programcısı ve birçok
kullanıcı Java appletlerinin başağrısına sebep olduğunu söylüyorlar.
"Neden applet çalışmıyor ?" içerikli birçok mail geliyor.
Applet çalıştığı zaman tam çalışıyor,
çalışmadığı zaman ise büyük bir sorun halini alıyor. Hatayı bulmak ve hatayı
düzeltmek gerçekten başağrısına neden olabiliyor. Hatta Java ile program
geliştirmeyi bu yüzden bırakanlar bile var. Değişik browserlar, browser
sürümlerinin farklılıkları, hatta browser konfigürasyonlarındaki farklılıklar
appletlerin çalışmasında rol oynayabiliyor. Browserlara gömülü Java Sanal
Makinasındaki ( Java Virtual Machine ) buglar ve bilgisayarın performansıda
etkili oluyor.
Şayet browser'ınız hiçbir appleti
çalıştıramıyor ise, java applet ihtiva eden bir sayfayı çağırdığınızda takılıp
kalıyorsa browser yazılımını tekrar kurmak çoğu zaman problemi ortadan
kaldırıyor. Bu söz konusu değilde, gri bir dikdörtgenden başka bir şey
göremiyorsanız bunun bir kaç sebebi olabilir.
Neden Gri Dikdörtgen?
Appletin yüklenmesi sırasında veya
yüklendikten sonra çalıştırılması sırasında meydana gelen hatalardan dolayı
oluşur. Java programlama dilinde bunun teknik adı "Exception" dır.
Java'da hataları yakalama imkanı olduğunu biliyoruz, daha doğrusu bilinen çoğu
hatayı desek daha iyi olur. Oluşan hatalar bilinmedik, beklenmedik hata veya
appletden kaynaklanmayan hatalar olabildiği için bu hataları yakalama imkanı
yok. Şimdi en çok karşılaşılan ve bilinen hataları inceleyelim :
Class dosyasına ulaşamama veya yükleyememe
Bilindiği gibi applet dediğimiz programcıklar,
derlendikten sonra class dosyası halini alıyorlar. Appletlerin çalışması için
bu class dosyalarının yüklenmesi gerekiyor. Şayet class dosyasının yeri
bulunamaz veya dosya yüklenirken hata oluşur ise gri kutunun içinde class
dosyasını bulunamadığına dair veya yüklenirken hata oluştuğuna dair bir hata
mesajı çıkar ve applet çalışmaz. Applet çalışmadığı için, ki hata daha applet
yüklenirken oluştuğu için, applet kodu içinden bu hatayı yakalamanız ve
engellemeniz mümkün değildir. Bu hata çoğu durumda, tagı içinde
class dosyasının bulunduğu yeri yanlış olarak belirtildiği zamanortaya çıkıyor.
Ağ kaynaklarına erişememe
Bazı zamanlar ağ üzerinde bulunana server
göçer veya herhangi bir sebepten bağlantı kurulamaz. Kullanıcı firewall
arkasındadır ve Socket, DatagramSocket istekleri çalışmaz. Eğer ağ kaynaklarına
erişim gerektiren bir applet yazıyorsanız, iletişim için TCP/UDP protokülü yerine
HTTP protokülünü kullanın. Çünkü firewall arkasında olan kullanıcı sayısı gün
geçtikçe artıyor. Karşılaşılan diğer bir hata sebebi ise, browserların
appletler ile ilgili kısıtlamalarından kaynaklanıyor.
Appletviewer'da sorunsuz çalışan applet, browserda
çalışmıyor. Applet sadece bulunduğu server ile bağlantı kurabilir. Birçok
applet ise domain isimlerini IP adresine çevirirken hata oluşturuyorlar. Bunu
önl