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