Wicket ile WEB-INF Klasör Yolu

Beni wicket kullanırken beni en çok dosya yolu kısmı rahatsız ediyor. CSS ve HTML için ayrı dosya yolları kullanılırken JAVA ve Wicket ayrı dosya yollarını kullanıyor.

Bu durum projemin bütünlüğünü iyiden iyiye bozmaya başladığında ben de bir çaresi var mı diye interneti taramaya başladım. Doğru düzgün bir çözüm bulamama rağmen şimdilik idare edebileceğim bir çözüm buldum.

WEB-INF klasörünü kullanmakta ısrar etmemin en büyük sebebi, projeyi development ortamından production ortamını geçirdiğinizde yerinin sabit kalması ve WAR dosyası oluşturulması sırasında WEB-INF klasörününde olduğu gibi içinde yer alması. Bu sayede proje bir aplikasyon server’ında tekrardan açıldığında ben hala istediğim dosyalara erişebiliyor olacağım.

WEB-INF Klasör Yolu

WEB-INF Klasör yolunu alabilmek için aşağıdaki gibi singleton bir yapı kullanıyorum. Çünkü dosya yolunu alma işlemi biraz maliyetli ve ben bu işlemi ikide bir tekrardan yapmak istemiyorum.

Burada vermiş olduğum kodu ben projenin Main‘ine yani wicket’ın “WebApplication” class’ından türemiş olan class’ında kullanıyorum. Tabi siz istediğiniz yerde bu kodu kullanabilirsiniz.


import java.net.URL;

...
public class MainApplication extends WebApplication {

...

private static final String WEBINF = "WEB-INF";
private static String WEBINF_FOLDER = null;

public static String getWebInfRelativePath() {
if (WEBINF_FOLDER == null) {
URL url = MainApplication.class
.getResource("MainApplication.class");
String className = url.getFile();
WEBINF_FOLDER = className.substring(1, className.indexOf(WEBINF)
+ WEBINF.length())
+ "/";
}

return WEBINF_FOLDER;
}

...

}

Bu size gerekli olan dosya yolunu döndürecektir. Fakat dosya yolunuz boşluk karakteri içeriyorsa sorunlar yaşabilirsiniz. Ben bir iki yerde boşluk karakteriyle sorunlar yaşadım. Encoding ayarlarını değiştirerek çözmeyi denediysemde istediğim başarıyı sağlayamadım. Bende daha kötü bir çözüm olsada çareyi ilgili karakterleri değiştirmekte buldum. Örneğin bende boşluk karakteri yerine dosya yoluna “%20” yazıyordu.  Bende if kısmının son satırında “WEBINF_FOLDER = WEBINF_FOLDER.replace(“%20″, ” “);”  yaparak boşluk karakterini geri koydum. Çok iyi bir çözüm olmasada şimdilik sorunumu ortadan kaldırdı.

Aklıma WEB-INF yolunu alacak daha iyi bir çözüm gelene kadar şimdlik bununla idare edeceğim. Yinede tavsiyelere açığım.

End Of Line