2012-12-22 16 views
5

java web uygulamasında servlet kullanarak erişmem gereken bir sürü metin, xml ve diğer dosyalar (yani kaynaklar) var. Örneğin, bir kullanıcı sorgusu tarafından bir servlet ile bir kısmı iade edilen bir xml dosyası vardır. Tomcat kullanıyorum. Bu dosyaları depolamak ve bunlara java kodundan erişmek için en iyi uygulama nedir? 1) Varsayılan klasörleri nerede koymalıyım, bunları Web arşivine veya Kavanozlardan birine eklemem gerekir mi? 2) Dosyalara java kodundan nasıl erişilir? Onlara giden yolu nasıl ayarlayabilirim ki herhangi bir ortamda çalışacak? P.S. Bu konuyla ilgili pek çok yazı okudum, bunların çoğu kavanozlarda kaynak depolamayı ve java.lang.Class.getResourceAsStream (String) kullanarak bunlara erişmeyi önerir. Garip görünüyor çünkü sınıflar ve veriler ayrılmalıdır.java web uygulamasında kaynak dosyalarını depolamak ve bunlara erişmek için en iyi yöntemler

cevap

7

Sınıf yükleyiciyi kullanarak statik kaynakları yüklemek gayet iyi. ResourceBundle, örneğin uluslararasılaştırılmış özellikler dosyalarını yüklemek için ne yapar.

Sınıf dosyalarınızla birlikte veya WEB-INF/lib'un içindeki bir kavanoza koyun ve daha önce okuduğunuz yanıtlarda belirtildiği gibi ClassLoader ile yükleyin.

Bu dosyalar, projenizdeki Java kaynak dosyalarından ayrı bir dizine yerleştirilmenizi yasaklamaz. Oluşturma işlemi, bunları çalışma zamanı için uygun yere koyduğundan emin olmalıdır. Maven ve Gradle kongresi, kaynak dosyaları src/main/java ve kaynak dosyaları src/main/resources'un altına koymaktır.

+0

1) Zaten WEB-INF/kaynakları klasöründe kaynak varsa ne olur? HTML sayfasında JavaScript tarafından kullanılır. Sayfa WEB-INF/index.html ve betik göreceli yolu kullanan kaynaklara başvurur. 2) Yolu kaynak klasörüne nerede saklamalıyım? Web.xml veya başka bir statik kaynakta yer var mı? – Alexander

+1

WEB-INF'deki kaynaklara dışarıdan erişilemiyor, bu nedenle tarayıcıdan WEB-INF'e bir JS dosyası yüklemek mümkün değil. Webapp'da (WEB-INF dahil) herhangi bir yerden kaynak yüklemek için ServletContext.getResourceAsStream() yöntemini kullanabilirsiniz, ancak bu yükleme sınıfını ServletContext'e erişmeye zorlar. İkinci sorunuzu anlamıyorum. Bu statik bir kaynak. Neden yolu sabit bir şekilde kodlamıyorsun? –

+0

One, getContext için bir sunucu uygulamasının bir örneğine ihtiyaç duyar ve ardından kaynak veya klasör yolu alır. Bir şey oluşturmadan statik yapmanın bir yolu var mı? İkinci sorum ise, bu tür sabitleri saklayacağım yer ile ilgiliydi. Web.xml gibi bazı web ile ilgili kaynaklarda yer var mı (sınıf kaynak kodlarından birinde sabit kalmak yerine)? – Alexander

İlgili konular