‘java’ etiketli yazýlar

Java’da resim formatı deÄŸiÅŸtirmek, resim boyutlarını öğrenmek gibi temel iÅŸlemler kolayca yapılabilir. Yine de bu iÅŸlemleri bir genel amaçlı bir “resim iÅŸleme sınıfı” toplamak isteyebilirsiniz. Bu sayfada bulacağınız ImageUtil sınıfı böyle bir sınıf için iyi bir baÅŸlangıç olabilir. Åžu anda sadece resim geniÅŸliÄŸi, yüksekliÄŸi, dosya boyutunu bulabiliyor, jpg, gif, png, bmp formatları arasında çevrim yapabiliyor. İlerleyen zamanlarda resim boyutu deÄŸiÅŸtirme, üstüne yazı yazma ve resme watermark ekleme gibi iÅŸlemleri de ekleyeceÄŸim. ImageUtil‘i direkt olarak kullanmasanız bile kodlarını inceleyerek bu iÅŸlemlerin nasıl yapıldığını rahatlıkla öğrenebilirsiniz. Sonuçta bütün bu iÅŸlemler için Java ile gelen javax.imageio.ImageIO sınıfını kullanılmakta.

ImageUtil metotları resim dosyasını ‘dosya adı’ olarak deÄŸil de File sınıfı olarak almakta. Elinizde sadece dosya adı varsa File nesnesini aÅŸağıdaki gibi oluÅŸturabilirsiniz.

File dosya=new File("c:/dizinadi/resim.jpg");

Metotları burada tek tek açıklamayacağım, bütün açıklamalar JavaDoc formatında kodun içerisinde bulunmakta. Aşağıdaki örneğe bakarak da sınıfın nasıl kullanıldığını görebilirsiniz.

Örnekler:

Not: Bu örnek ImageUtil sınıfının main metodu içerisinde aynen bulunmakta.

	try{
		//test
		String filePath="d:/_dev/temp/"; //!!!bunu ve dosya adini degistirmeyi unutmayin!!!
		File f = new File(filePath+"test.png");
		System.out.println("test.png: "+ImageUtil.findWidth(f)+"x"+ImageUtil.findHeight(f));
 
		f=ImageUtil.convertTo(f, new File(filePath+"/test.gif"), ImageUtil.GIF);
		System.out.println("test.gif: "+ImageUtil.findWidth(f)+"x"+ImageUtil.findHeight(f));
 
		f=ImageUtil.convertTo(f, new File(filePath+"/test.bmp"), ImageUtil.BMP);
		System.out.println("test.bmp: "+ImageUtil.findWidth(f)+"x"+ImageUtil.findHeight(f));
 
		f=ImageUtil.convertToJpg(f, new File(filePath+"/test.jpg"), 0.9f);
		System.out.println("test.jpg: "+ImageUtil.findWidth(f)+"x"+ImageUtil.findHeight(f));
 
	}
	catch(Exception e){
		e.printStackTrace();
	}

(daha fazla…)

Web sitesi hazırlarken sayfalarınızın tarayıcı önbelleÄŸine alınmasını (yani cache’lenmesini) engellemenin iki temel yolu var. Birincisi HTML içerisinde meta etiketleri yazmak, ikincisi sunucu tarafında sayfanın baÅŸlığına (header) gerekli satırları eklemek. AÅŸağıda bu iki yöntemi bulacaksınız.

1. HTML ile sayfanızın önbelleğe alınmasını engelleme

<meta http-equiv=”Pragma” content=”No-Cache” />
<meta http-equiv=”cache-control” content=”no-cache, no store” />
<meta name=”Expires” content=”Mon, 26 Jul 1997 05:00:00 GMT” />

Yukarıdaki kodu sayfanızda <head></head> etiketleri arasında yerleştirmelisiniz. Bu yöntemin dezavantajı XML ya da RSS gibi HTML olmayan sayfalarda kullanılamayacak olmasıdır.

2. Sunucu tarafında engelleme

Ön belleğe alma işlemini sunucu tarafında engellemek için, göndereceğimiz sayfa ile birlikte bazı başlıkları (header) göndermemiz gerekiyor. PHP, ASP.NET ve JAVA/JSP için bu başlıkların nasıl yazılacağını aşağıda bulabilirsiniz. Birinci yöntemden farklı olarak bu başlıkları resimlerde dahil olmak üzere her türlü dosyayı gönderirken kullanabilirsiniz.

PHP

 header("Expires: Mon, 01 Jul 1990 05:00:00 GMT");
 header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
 header("Cache-Control: no-store, no-cache, must-revalidate");
 header("Cache-Control: post-check=0, pre-check=0", false);
 header("Pragma: no-cache");

ASP.NET

Response.ClearHeaders();
Response.AppendHeader("Cache-Control", "no-cache"); //HTTP 1.1
Response.AppendHeader("Cache-Control", "private"); // HTTP 1.1
Response.AppendHeader("Cache-Control", "no-store"); // HTTP 1.1
Response.AppendHeader("Cache-Control", "must-revalidate"); // HTTP 1.1
Response.AppendHeader("Cache-Control", "max-stale=0"); // HTTP 1.1
Response.AppendHeader("Cache-Control", "post-check=0"); // HTTP 1.1
Response.AppendHeader("Cache-Control", "pre-check=0"); // HTTP 1.1
Response.AppendHeader("Pragma", "no-cache"); // HTTP 1.0
Response.AppendHeader("Expires", "Mon, 26 Jul 1997 05:00:00 GMT"); // HTTP 1.0

Yukarıdaki ASP.NET kodunu Stackoverflow’da ÅŸu sayfada buldum: Making Sure a Web Page is not Cached Across All Browsers. DenemiÅŸ deÄŸilim ama muhtemelen doÄŸru çalışıyordur.

Java

response.setHeader("Cache-Control","no-cache"); //HTTP 1.1
response.setHeader("Pragma","no-cache"); //HTTP 1.0
response.setDateHeader ("Expires", -1); //proxy seviyesinde engelleme
Kategoriler: Programlama
Tags: , , ,
devam et >

Java ile programlama yaparken ‘String’ deÄŸerleri çeÅŸitli sayı tiplerine çevirmek pek zor bir iÅŸ sayılmaz. Çevirmek istediÄŸiniz sayı tipinin ‘parseXXX’ metodunu kullanarak tek satırda bu iÅŸi yapabilirsiniz (int i=Integer.parseInt(”123″)). Tabii dönüştüme yapacağınız deÄŸerin geçerli bir sayı olmama ihtimaline karşı bu iÅŸlemi ‘try…catch’ içerisine almak gerekir ve iÅŸlem birdenbire 5 satıra (ya da 3, ya da uzun tek bir satıra) çıkar (try{ i=Integer.parseInt(”123″)); }catch(Exception e){}). Bunu defalarca yapacaksanız bu iÅŸ iyice sinir bozucu hale gelir.

AÅŸağıda sayı çevrim iÅŸini basitçe halleden bir sınıf var. İsteÄŸiniz sayı formatına göre ‘toInteger’, ‘toDouble’, ‘toLong’, ‘toFloat’ metotlarından birisini çağırarak dönüştürme iÅŸini yapabiliyorsunuz. EÄŸer isterseniz, ‘String’in uygun bir sayı olmaması durumunda (yani sayı olmayan herhangi bir metin), geçerli (default) olacak bir deÄŸeri de ikinci parametre olarak verebilirsiniz. Bu anlatımdan birÅŸey anlamadıysanız -ki anlaşılmaması için tüm yeteneklerimi sergiledim- aÅŸağıdaki örneklere bakıp olayı çözebilirsiniz.

Kullanım Örnekleri:

int intval=-1;
intval = NumberUtil.toInteger("123,456"); //sonuç: intval=0
intval = NumberUtil.toInteger("ahmet1", 5); //sonuç: intval=5
intval = NumberUtil.toInteger("123456", 5); //sonuç: intval=123456

Bu da sınıfımız:

public class NumberUtil {
 
	public static int toInteger(String str){
		return toInteger(str, 0);
	}
 
	public static int toInteger(String str, int defaultValue){
		int retValue = defaultValue;
		try {
			retValue=Integer.parseInt(str);
		} catch (Exception e) {	}
		return retValue;
	}
 
	public static long toLong(String str, long defaultValue){
		long retValue = defaultValue;
		try {
			retValue=Long.parseLong(str);
		} catch (Exception e) {	}
		return retValue;
	}	
 
	public static float toFloat(String str, float defaultValue){
		float retValue = defaultValue;
		try {
			retValue=Float.parseFloat(str);
		} catch (Exception e) {	}
		return retValue;
	}	
 
	public static double toDouble(String str, double defaultValue){
		double retValue = defaultValue;
		try {
			retValue=Double.parseDouble(str);
		} catch (Exception e) {	}
		return retValue;
	}
}
Kategoriler: Programlama
Tags: , ,
devam et >

Başlık pek açıklayıcı olmadı aslında. Direkt olarak örnekle açıklayayım olayı:
Mesela bir ürün tablonuz var. Ürünleri kategorilerine göre listelemek istiyorsunuz. Bununla da yetinmeyip sayfa başına en fazla 20 tane ürün bulunacak şekilde sayfalama yapmak istiyorsunuz. Temel bilgilere sahip bir yazılımcının tercih edeceği yöntem şuna benzer birşey olur:

Öncelikle sayfalamayı yapabilmek için bu kategorideki toplam ürün sayısını bulmanız gerekir. Bunu şu sorguyla yaparsınız:
SELECT count(id) AS data_count FROM urunler WHERE kategori_id=’3′

Sonra da göstereceğiniz ürünleri
SELECT * FROM urunler WHERE kategori_id=’3′ LIMIT 0,20
sorgusu ile alıp listeleme iÅŸlemini yaparsınız. Sonraki sayfalarda satır sayısını tekrar tekrar hesaplamak istemiyorsanız bulduÄŸunuz satır sayısını ‘SESSION’ ya da ‘COOKIE’ kullanarak saklayabilirsiniz. Bu iÅŸlemlerdeki sorun aynı sorguyu biraz deÄŸiÅŸtirerek iki kere yazmanız gerekmesidir. Bu zaman zaman sıkıntı yaratabilir.

MySQL insanları 4. versiyonu çıkarmadan önce oturmuşlar, bu işlemleri tek seferde yapabilmemiz için SQL_CALC_FOUND_ROWS diye birşey yapmışlar.
(daha fazla…)

Kategoriler: Programlama
Tags: , ,
devam et >

Tomcat, JSP, MySQL kullanarak web sitesi yapmaya çalışırken malum Türkçe karakterleri sağlıklı bir şekilde görüntüleyebilmek ne yazık ki problemli bir iş. Yeterince tecrübeli ya da en azından şanslı değilseniz orada burada bir ton ayar yapmak gerekecektir. Bu yazıda Tomcat, HTML, JSP, MySQL için yapmanız gereken ayarları yazdım.
Çözümde karakter seti olarak ISO-8859-9 gibi setler yerine UTF-8 kullanılmıştır.

(daha fazla…)

Kategoriler: Programlama
Tags: , , , ,
devam et >