Fihrist

21 Ekim 2013 Pazartesi

Guid

C#'ta JAVA'daki UID gibi Guid (globally unique identifier) kullanmak isterseniz
new Guid()
şeklinde değil de
Guid.NewGuid()
şeklinde kullanın. Aksi halde hepsi 0 (yazıyla sıfır) olarak gelecektir.

27 Eylül 2013 Cuma

SharpZipLib ile atılan ZIP'in java.util.zip ile doğrulanması

Corrupt ZIP file hatası alıyorsanız, ZIP'i kontrol edin. 7zip ile açıp içideki bir dosyanın bilgilerini incelediğinizde Version:45 varsa zip64'tür, ki bunu JAVA desteklemiyor. O yüzden
myZipOuputStream.UseZip64 = UseZip64.Off;
yapıp atın. Artık Version:20 olduğunu göreceksiniz. Şu halde o hatayı almıyor olmanız lazım.

11 Eylül 2013 Çarşamba

HP 2311x HDMI problemi çözümü (Mac mini)

Mac OS 10.8.3 Mac mini'de HDMI üzerinden HP 2311x monitörüne bağlandığında görüntü net gelmiyorsa ve ekrana sığmıyor biraz taşıyorsa Image Control -> Custom Scaling -> Overscan -> Off yapın.

29 Mayıs 2013 Çarşamba

Interface - Abstract - Class : JAVA - .NET (C#)

Interface I olsun. Abstract A olsun. A, I'dan türetilmiş. C1 ve C2 sınıfları da A'dan türetilmiş. C1 ve C2'de f fonksiyonunun farklı implementasyonları olsun. Bu fonksiyonlar da I'da declare edilmiş olsun. JAVA'da A içine bir şey yazmaya gerek olmadan C1 ve C2 sınıflarındaki f'lerin I'daki declaration'dan türediğini compiler anlıyor. .NET'te ise A, I'dan türetilmiş bir sınıf olduğu için compiler I'da declare edilen fonksiyonların A'da implemet edilmesini bekliyor. Biz de implement etmek yerine A'da abstract olarak declare ediyoruz C1 ve C2'de de override ederek implement ediyoruz. İstersek A'da da implement edebiliriz. Bunun avantajı C1 ve C2 sınıflarında implement edilen fonksiyonların ortak özellikleri varsa bunu A'da implement edip C1 ve C2'deki f'lerde A'daki fonksiyon çağırılabilir. Yalnız burda dikkat edilmesi gereken C1 ve C2'de yine override yazılırken A'da implement edilen f virtual yapılır. JAVA ilk örnek: abstract class'taki bir declaration mecburiyeti yok

public interface I {
 public void f();
}

public abstract class A implements I{
}

public class C1 extends A{
 public void f() {
  // do something
 }
}

public class C2 extends A{
 public void f() {
  // do something else
 }
}
JAVA ikinci örnek: istenirse abstract class'ta da implementation yapılabilir ve normal class'lardan çağırılabilir

public interface I {
 public void f();
}

public abstract class A implements I{
 public void f() {
  // do something
 }
}

public class C1 extends A{
 public void f() {
  super.f();
  // do something else
 }
}

public class C2 extends A{
 public void f() {
  super.f();
  // do something different
 }
}

C# ilk örnek: abstract class'ta implement'e gerek olmayan Dikkat edilmesi gereken, abstract class'taki fonksiyon abstract olmalı, implementation olmamalı. Normal class'lar da override etmeli.

public interface I {
 public void f();
}

public abstract class A : I {
 public abstract void f();
}

public class C1 : A {
 public override void f() {
  // do something
 }
}

public class C2 : A {
 public override void f() {
  // do something else
 }
}

C# ikinci örnek : abstract class'ta da implementation olan ve normal class'larda abstract'taki implementation çağırılan Dikkat edilmesi gereken, abstract class'taki fonksiyon virtual olmalı, normal class'taki fonksiyon yine override etmeli ve bu fonksyion abstract class'takini çağırabilir.

public interface I {
 public void f();
}

public abstract class A : I {
 public virtual void f() {
  // do someting
 }
}

public class C1 : A {
 public override void f() {
  base.f();
  // do something else
 }
}

public class C2 : A {
 public override void f() {
  base.f();
  // do something different
 }
}

26 Şubat 2013 Salı

JAR İmzalamak

Applet'ler tarayıcılarda çalıştırılacağı zaman tarayıcı applet'in imzasını kontrol ediyor. Eğer güvenilir bir sertifikaya sahip biri tarafından imzalanmamışsa kullanıcıyı uyarıyor. Elimizdeki applet JAR'ını imzalamak için öncelikle

keytool -v -importkeystore -srckeystore myPfxFile.pfx -srcstoretype PKCS12 -destkeystore myKeyStore.jks -deststoretype JKS

diyerek JKS tipinde bir keystore oluştururuz. Bu sırada PFX dosyasını açabilmek için şifresini soruyor ve sizden yeni keystore'unuz için parola belirlemenizi istiyor. JKS dosyanızı oluşturduktan sonra

keytool -list -v -keystore myKeyStore.jks

diyerek keystore'un içindeki anahtarları görebiliyorsunuz. Burdan hangi anahtarı istiyorsanız onun alias'ını not edin. İmza atarken onu kullanacağız.

jarsigner -keystore myKeyStore.jks -storepass myStorePass myJarFile.jar myAlias

diyerek imzalamayı gerçekleştiriyoruz. İmzalanınca JAR'ın içinde .SF ve .DSA veya .RSA (imzacınızın algoritmasına göre) iki dosya oluşuyor. Oradan kontrol edebilirsiniz. İmza mevcut JAR dosyasının üzerine yazıyor. Bu arada JAR'ları sıkıştırma programları vasıtası ile açıp içine bakabilirsiniz. Tavsiyem 7zip. Keytool v jarsigner JDK ile geliyor. Bunu da hatırlatmakta fayda var.

JSTL

Servlet ile JSP'nin haberleşmesinin çeşitli yolları var. Tavsiye edilmeyeneni bu iki yapıyı iç içe geçmiş halde kullanmak, yani JSP sayfasında scriptlet yazarak <% %> tag'leri içinde Java sınıflarınıza ulaşmak veya Java sınıflarınızın içinde JSP'lere HTML yazdırmak gibi. Tavsiye edilen ise bütün HTML kodlarının JSP sayfasında olması. JSP'den HTML form kullanarak yazdığınız servlet'lere veri gönderebilirsiniz. Servlet içinde de bir değişkene istediğiniz veriyi atıp JSTL ile bunları JSP içinde kullanabilirsiniz.

Servlet sınıfınızın içinde doPost veya doGet içinde,

request.setAttribute("myAttributeName", myObject);

şeklinde göndereceğiniz objeyi JSP üzeirnden ulaşacağınız isim ile eşleştirin. Daha sonra,

request.getRequestDispatcher("myJspPage.jsp").forward(request,response);

diyerek JSP'ye gönderin. JSP içinden de

${myAttributeName}

diyerek ulaşabilirsiniz.

JSTL daha bir çok özellik barındırmaktadır koşul ve döngü gibi. JSTL kullanmak için indireceğiniz JSTL jar'ını eklemeyi unutmayın.


IDEA'da Tomcat ile çalışmak

Resimli ama İngilizce olarak
http://wiki.jetbrains.net/intellij/Creating_a_simple_Web_application_and_deploying_it_to_Tomcat
adresinden ayarları yapabilirsiniz.

Bu şekilde artık Idea Tomcat'i tanıyor olacaktır. Daha sonra linkteki adımları takip edip web projesi de oluşturabilirsiniz. Fakat projenize tanımlı Application Server'ları göstermezseniz istediğiniz gibi çalışamazsınız. Mesela HttpServlet kullanmak için onun jar'ını build path'de bulundurmalısınız. Elle eklemek yerine bütün kütüphaneyi göstermek daha mantıklı olacaktır.

Web projesinin istediğiniz bir Application Server'ı görmesini sağlamak için o kütüphaneyi göstermeniz lazım. Projeyi seçip F4'e basıp sağdaki +'yı tıklayın ve Libraries deyin. En aşağıda Application Servers görünecektir. Oradan ekli Server'lardan, mesela az önce eklediğimiz Tomcat 7, birini seçebilirsiniz.