Java Appletleri ve Web Programlama

Java ile web üzerinden program işletimi appletler aracılığı ile mümkündür.

Applet’ler ve HTML

Web için yazılan Java uygulamaları genellikle applet olarak bilinir. HTML dökümanı kullanıcının tarayıcısına çekilince HTML içine gömülmüş applet tanımlayıcı parça yorumlanır. Tarayıcı burada verilen bilgileri kullanarak appleti yükler ve çalıştırır. HTML içinde applet çağırma örneği:

You do not have a Java enabled browser

Burada kullanılan etiketi (tag) içinde ‘codebase’ özelliği (attribute) appletin bulunduğu dizinin tam adresini, ‘code’ etiketi çağrılan applet sınıfının adını gösterir. etiketi içinde applete girecek parametreler adı ve değeri ile birlikte konur..

Güvenlik

Appletler ağ üzerinden çekilip yerel makina üzerinde çalıştırıldığı için programcılar tarafından kötü amaçlı kullanılabilirlerdi. Bu nedenle uygulamalara göre daha fonksiyonları sınırlanmıştır.

Appletler yerel makina üzerindeki herhangibir programı çalıştıramazlar.
Yerel makinanın dosya sistemi üzerinde okuma ve yazma yapamazlar.
Appletlerin kaynağı olan makina dışındaki makinalarla haberleşmesine izin verilmez.
Appletlerin çalıştırıldıkları makina üzerindeki bilgilere erişimi kısıtlanmıştır. Örneğin kullanıcı adı, şifre ve e-mail adresi türü bilgiler bu gruba girer.

Appletler ve Uygulamalar

Appletleri uygulamalardan ayıran en önemli özeellik ‘Applet’ sınıfından bir ana sınıfa sahip olması gerekmesidir. ‘Applet’ sınıfı ‘panel’ sınıfını devralan bir sınıf olduğu için bu bileşenin tüm özelliklerini içerir. Bu nedenle standart olarak ‘FlowLayout’ yerleşim özelliği gösterir. ‘Applet’ sınıfının programcılar tarafından üstüne yazılması (overriding) gereken dört metodu vardır:

init(): Applet ilk yüklendiğide çağrılır. Sınıfın başlatılma (initialization) aşamasında inşa edicisinin çalışması gibi appletin yüklenmesi esnasında da bu metod otomatik olarak çalışır ve applet çalışmaya hazır hale getirilir.

start(): Applet yüklendikten sonra buradan çalışmaya başlar. Appleti çağıran sayfanın yeniden görünür hale geçmesi durumunda bu metod tekrar tekrar çağrılır.

stop(): Appleti içeren web sayfasının görünmez hale geçmesi esnasında bu metod çağrılır.
destroy(): Applet sonlanırken bu metod çağrılarak appletin kullandığı tüm kaynaklar sisteme geri verilir.

Örneğin kullanıcı tarayıcısında Java appleti içeren bir sayfa açınca appletin ‘init’ ve sonra da ‘start’ metodları çağrılır. Kullanıcı sayfa içi bir bağlantıya tıklayınca appletin ‘stop’ metodu çağrılarak applet geçici olarak durdurulur. ‘init’ ile applete ayrılan kaynaklar hala tutulmaktadır. Daha sonra kullanıcı tarayıcısını kapatmadan tekrar applet içeren sayfaya dönerse appletin ‘init’ metodu çağrılmadan ‘start’ metodu çağrılır. Appleti içeren sayfa veya tarayıcı kapatılınca ‘destroy’ metodu çalıştırılarak appletin elindeki tüm kaynaklar sisteme iade edilir.

Applet’lerle Sunucu Kaynaklarına Ulaşım

Appletler sunucu makinalarda dağıtık bir şekilde duran kaynakların alınıp kullanılması için çeşitli metodlar kullanır. Bunlardan bazıları:

getImage(URL): Verilen adresteki imaj nesnesini getirir.
getAudioClip(URL): Verilen adresteki ses nesnesini getirir.
play(URL): Verilen adresteki ses nesnesini getirir ve çalar.
getCodeBase(): Appletin kendisini gösteren dizinin adresini verir.
getParameter(): Applete girilen parametreleri ‘String’ olarak verir.
appletContext.showDocument(URL): Verilen adresteki dökümanın tarayıcıda görüntülenmesini sağlar.

Döküman ve imaj nesnesi gibi verilere URL (Evrensel Kaynak Yer Belirticileri – Universal Resource Locators) denilen adreslerle erişilebilir.

Örnek bir URL aşağıdaki gibi olabilir:

http://hadi.ulakbim.gov.tr/documents/programming/index.myhtml

Burada görüldüğü gibi URL’ler üç parçadan oluşurlar.

Protokol kısmı kaynağa erişimde kullanılacak uygulama seviyesi (application layer) protokolünü belirtir. Bu gruba http, ftp, ldap, telnet gibi protokoller örnek veilebilir. Dosyalara erişim bağlamında genellikle http ve ftp kullanılır.

Kaynak makina adresi kısmı, alan adı veya IP adresi ile ifade edilen ve ilgili kaynağın bulunduğu makinayı gösteren adres kısmıdır. ‘hadi.ulakbim.gov.tr’ veya ’193.140.83.35′ gibi değerler alabilir.
Dosya adı kısmı ise kaynağı sunan sunucunun ilgili kaynağa erişim için bize verdiği yol tanımından oluşur. Genellikle dosya sistemlerinde olduğu gibi hiyerarşik yapıdadır. Yukarıdaki örnekte ‘/documents/programming/index.myhtml’ olarak görülmekte.

URL’leri giriş-çıkış stremları gibi gelişmiş araçlarla desteklenmiş olarak kullanabilmek için ‘java.net’ paketinde ‘URL’ sınıfı tanımlanmıştır. Bu sınıfı uygulamamızda nesneleştirdikten sonra giriş, çıkış streamlarını kullanarak dosya download ve upload işlevlerini gerçekleştirebileceğimiz gibi kendimize özgü bir protokol kurgusu oluşturup kullanabilmemiz bile mümkündür. URL sınıfı kullanılan bir örnek aşağıda verilmiştir:

ReadURL.java

import java.net.*;
import java.io.*;
class ReadURL {
public static void main (String [ ] args) {
try {
URL address = new URL(args[0]);
InputStreamReader iread = new InputStreamReader(address.openStream( ));
BufferedReader in = new BufferedReader(iread);
String line = in.readLine( );
while (line != null) {
System.out.println(line);
line = in.readLine( );
in.close( );
catch (MalformedURLException e) {
System.out.println(“URL exception “ + e);
catch (IOException e) {
System.out.println(“I/O exception “ + e);

Burada komut satırından verilen adresteki dökümanı satır satır okuyup ekrana basan bir uygulama gösterilmiştir. Dikkati çeken bir nokta da girilen URL’in hatalı olması durumunda URL sınıfının inşa edicisinin ‘MalformedURLException’ üretebileceğidir.

Uygulamalar ve Appletlerin Birleştirilmesi
Appletler sınıf tanımları içindeki statik metodları görmezden gelirler. Bu özellik kullanılarak yaratılacak programların hem applet hem de uygulama olarak çalıştırılabilmesi sağlanabilir. Aşağıda buna örnek verilmiştir.

PaintApplet.java

import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class PaintApplet extends Applet {
// executed for applications
// ignored by applet class
public static void main (String [ ] args) {
Frame world = new PaintApplet( ).application( );
world.show( );
}
private Frame application( ) {
return new AppletFrame (this);
}
private class AppletFrame extends Frame { public AppletFrame (Applet p) {
setTitle(“Paint Application”);
setSize (400, 300);
p.init( ); p.start( );
add(“Center”, p);
}
}
... // remainder as before
}

Burada program, application olarak çağrılmış ise ‘Applet’ sınıfı içindeki ‘main’ statik metodu çağrılır. Bu metod ‘application’ metodunu çağırarak bir ‘AppletFrame’ türü nesne yaratır ve ‘main’ metoduna bu nesneyi iletir. Ancak bu nesne aslında ‘Frame’ sınıfını devralmış ve içine de applet nesnesinin kendisi sanki bir panel ekleniyormuş gibi eklenmiştir. Dolayısıyla appletimiz bir uygulama çerçevesinin (frame) içinde karşımıza gelecektir. Artık ‘Applet’ sınıfının ‘init’ ve ‘start’ metodları otomatik çağrılamayacağı için programın başlangıcında yapmasını istediğimiz işleri yaptırmak için bizim tarafımızdan açık olarak (explicitly) çağrılmışlardır.

Eğer program applet olarak çağrılırsa ‘main’ metodu hiç çağrılmayacak, ‘AppletFrame’ nesnesi yaratılmayacak ve applet normal işleyişinde çalışacaktır.

Konuya Yakın Benzer Yazılar

Sizde Yorum Yapın!

Konu Hakkındaki Düşüncelerinizi
Yazabilirsiniz!

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*

Şu HTML etiketlerini ve özelliklerini kullanabilirsiniz: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>