Archive for the ‘Applet’ Category

Resim – Dosya Upload Appleti

Web sitenizde resim ya da dosya upload etmeyi kolaylaştıracak bir applete ihtiyacınız var ise pegaa.com için yazdığım applet tam size göre.
5 Kasım itibari ile %90’ı bitti şu anda aktif olarak kullanılır vaziyette fakat dökümantasyonu ve bir demo sayfası olmadığı için pratik olarak kullanmak zor, parametre adlarını vs yi bilmeden kullanmanız için kodlara detaylıca göz atmanız lazım 🙂
adres : http://code.google.com/p/javauploader/

Kendime bir roadmap hazırladım ve Kasım sonuna kadar eksik dökümantasyonu, demo sayfasını ve kodlardaki iyileştirmeleri gerçekleştireceğim, bir aksilik olmazsa tabi :).

Gelişmeler oldukça buraya da alacağım.

Kodu alıp incelemek, kendinize göre çevirmekte özgürsünüz 😉

Yeni applet teknolojisi

Applet’ler Java’nın webe getirdiği en önemli araçlardan biridir her ne kadar ağır, yavaş vs gibi isimlerle anılsa da zaman içinde appletler büyük gelişmeler gösteriyor.
Sun java6 dan 7 ye geçiş aşamasında appletler içinde geliştirmeler yaptı ve yeni bir applet teknolojisi oluşturdu. Yeni applet teknolojisi tamamen yeniden ele alınmış, tarayıcı plugini ve appletin JVM si gibi yapılar tamamen değiştirilmiş.
Yeni applet teknolojisi ile:

  • Artırılmış kullanıcı deneyimi
  • Appletler arka planda başlatılacak
  • Artırılmış JNLP desteği
  • Her applete özgü konfigürasyon
  • Heap boyutu ve java2d ayarlama
  • Geliştirilmiş Java/JavaScript köprüsü
  • Geliştirilmiş Windows Vista desteği
  • Signed appletler Internet Explorer ile sorunsuz çalışacak

gibi yenilik ve geliştirmeler gelecek.

Appletlerin çalışma şekli tamamen elden geçirilmiş ve appletler artık tarayıcı içindeki JVM’de değil işletim sisteminde açılmış JVM’ler içinde çalışacak. Bu özellik her applete özgü ayarlama yapmayı kolaylaştırıyor. Çünkü her JVM 1 applet ile ilişkili olacak ve ayarları sadece o applete etki edecek.

Kişisel düşüncem bu tür geliştirmelerin applet’ler ve onlara programcıların bakış açısını değiştirmesi açısından çok önemli çünkü kendim bir kaç applet geliştirdiğim için applet’lerin sıkıntıları ile bizzat uğraştım, bunların en başında ve en önemlisi şu anki appletlerin tarayıcı içindeki JVMde çalışmasından dolayı oluşan gözle görülür ağır açılışlar ve kötü kullanıcı deneyimi (geç tepki vermeler vs). Yeni yapı tahminimce buna çözüm olacak çok güzel haber !
Appletler eğer signed ise Java’nın bütün güzelliklerini kullanabildikleri için kullanıcıya program kurdurmadan bir çok ayrıntıya girmesi gereken programlar yazmada şu anda 1 numara örneğin “file upload” araçlarını ele alırsak flash ve applet ile yazılanları yan yana getirirsek appletin yapabileceği çok şey olduğunu görürsünüz, applet resimi ön izleme yapabilir, resimi yüklemeden yatırmanızı sağlar hatta bir applete editör ekleyip ön düzenleme bile yaptırabilirsiniz, fakat yanlış bilmiyorsam flash resim ön izleme (lokal dosya sistemindeki bir resimi kastediyorum) yapılamıyor, ileride o özelliği eklerlermi bilmem ama applet daha programa yakın bu tür konularda.

Bu yeni gelişmeler için detaylı bilgi https://jdk6.dev.java.net/plugin2/ ve http://java.sun.com/developer/technicalArticles/javase/newapplets/ sayfalarında yer almaktadır.

Applet’ten Javascript çağırmak

Appletten Javascript fonksiyonlarını çağırmak için JSObject nesnesini kullanmalıyız.
JSObject nesnesi jre_dizini/lib klasörü içindeki plugin.jar içinde yer almaktadır. Yani JSObject nesnesini ve apilerini appletinizde kullanmak istiyorsanız projenizin kütüphanesine bu plugin.jar’ı da eklemelisiniz.
appletin init() metodu içinde tarayıcının JSObject nesnesine referansını almalıyız.

public void init()
{
jso = JSObject.getWindow(this);
}

jso referansını appletin herhangi bir yerinde kullanabiliriz. JSObject nesnesi ile javascript fonksiyonlarını çağırmak için applet içinden, aşağıdaki gibi bir fonksiyon çağrısı yapmalısınız.

if(jso != null )
try {
jso.call(“fonksiyon_adi”, new String[] {parametreler,…});
}
catch (Exception ex) {
ex.printStackTrace();
}
}

Yukarıdaki 2 gösterim applet içinde JSObject nesnesine nasıl referans alınacağı ve JSObject referansı ile nasıl javascript fonksiyonu çağrılacağını göstermektedir. Appletimizde JSObject nesnesine referans alabilmemiz için html kodunda mayscript parametresinin true değerini alması gerekmektedir. Aşağıda örnek bir html kodu yer almaktadır.

<object type=”application/x-java-applet;version=1.4.1″ width= “800” height= “600” name=”jsap” id=”jsap”>
<param name=”codebase” value=”applet/”>
<param name=”archive” value=”applet.jar,plugin.jar”>
<param name=”code” value=”com.test.AppletMain”>
<param name=”mayscript” value=”yes”>
<param name=”scriptable” value=”true”>
<param name=”name” value=”jsapplet”>
</object>

Signed applet nasıl yapılır ?

Applet Java programlarının, server bilgisayarlarındaki java kodlarının kullanıcı bilgisayarına otomatik olarak (browser aracılığı ile) indirilen ve çalıştırılan versiyonudur. Yani kullanıcı browseri aracılığı ile sizin yazdığınız programı kullanır.
Bu noktada appletin güvenliği devreye girer çünkü kullanıcı kodun içeriğini bilemiyeceği için güvenlik riski olan bir durum ortaya çıkar fakat Java nın yazarları buna çare olarak security manager adlı sistemi geliştirmişlerdir,böylece koda bazı sınırlamalar koyarak kullanıcıya zarar vermesi önlenir.
Appletlerdeki bu sınırlamayı aşmanın tek yolu signed applet yaratmaktır.Signed applet yapmak için şu adımları izleyin .

1.Öncelikle appletin gerekeceği bütün sınıfları bir jar içine alın.
jar cvf jar_adi.jar ilk.class (veya * gibi wildcard) varsa_klasor_adi
gibi jar komutu ile jar dosyasını oluşturun,eğer winrar gibi bir program var ise jar dosyası oluşturmak çok kolay yapmanız gereken klasörleri,dosyaları boş jar dosyası içine sürükleyip bırakmak.

2.Şimdi applet için gerekli private/public keyleri ve ilgili dosyasını oluşturalım bunun için
keytool -genkey -alias signFiles -keystore tayfunstore -keypass kpi135 -dname “cn=tayfun” -storepass ab987c
gibi bir komut işimiz görür.
bu komutta
genkey komutu işlemimizi yani “generate key” anahtar yarat direktifini verir
alias signFiles ilerki bir komutta referans olacak bir kelimedir.bir sonraki komutta anlarsınız
keystore oluşturulan publi/private keylerin hangi dosyada saklanacağı bilgisini bu komutla verirsiniz.
keypass bizim private keyimizin şifresi
dname “cn=tayfun” bunun manası applete açılırken applete izin verilip verilmeyeceğini soran dialog kutusunda görünecek bilgilerdir.bu direktif ile ilgili değerleri veririz.
storepass public/private key bilgilerinin koyulacağı dosyanın şifresi

3. Appleti signed yapmadaki son adımımız (benim işime bu 3 adım yaradı )
jarsigner -keystore tayfunstore -storepass ab987c -keypass kpi135 -signedjar SSignedApplet.jar SignedApplet.jar signFiles


keystore public/private keylerin koyulduğu dosyanın adı bir önceki işleme bakın
storepass bir önceki işlemde private/public key dosyasında erişim için şifreyi belirlemiştik.
keypass private keyimizin şifresi
signedjar bu komuttan sonra meydana çıkacak jarın adı
SignedApplet.jar signFiles ->bunlar ise sıra ile sign edilecek jarın adı, yalnız bu jarın tam adresi ile vermeniz gerekli eğer komutu verdiğiniz dizinde ise direkt adınız yazabilirsiniz ama aynı dizinde değilse tam adresini vermelisiniz.Relative yani ../../ tarzı adreslerde olabilir.
signFiles bir önceki komuttan hatırlarsanız alias olarak signFiles vermiştik işte şimdi bu alias işimize yarıyor böylece 1 önceki komuttaki değerleri bu komutta kullanabiliyor.

Bu 3 işlemden sonra buradaki örnekteki SSignedApplet.jar gibi sizin verdiğiniz isimde signed bir applet meydana gelir.

Bu applet signed olduğu için kendi bilgisayarınızdaki programdan farksızdır hertürlü işlemi bu appletin indirildiği kullanıcı bilgisayarında da yapabilirsiniz. Appletin sınırlarını kırarsınız, fakat kullanıcıyı mağdur etmemek için Applet öncelikle bu signed jarın çalıştırılıp çalıştırılmayacağını sorar, işte bu noktada kullanıcı böyle bir dialog kutusu gelince ne yapacağını şaşıracağı ve hayır diyebileceği için signed appletleri sık kullanmak sakıncalıdır.