SORU
29 Ocak 2010, Cuma


Nereye ve JSP/Sunucu uygulaması bir web uygulaması özellikleri dosyaları nasıl okunur?

Benim web uygulaması için gerekli zaman .properties bir dosyaya eklemek istiyorum yani finance@xyz.com gibi önceden tanımlanmış kullanıcı ayarlamak ve erişim e-posta göndermem gerekiyor. Bu doğru bir prosedür, yani bu dosyayı nereye koymalıyım? Kaynak ve JSP dosyaları için iki ayrı klasörlere sahip olan Eclipse IDE kullanıyorum.

CEVAP
29 Ocak 2010, Cuma


Seçim senin. Temelde (SAVAŞ) Java web uygulaması arşivde üç yolu vardır:

  1. Sınıf koyunsınıf-göreli bir yol ile ClassLoader#getResourceAsStream() ile yükleyebilirsiniz , böylece:

    ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
    Properties properties = new Properties();
    properties.load(classLoader.getResourceAsStream("foo.properties"));
    

    Burada foo.properties olması gereken yer bir kökleri kaplı tarafından varsayılan sınıf bir Web uygulaması, örneğin web /WEB-INF/lib /WEB-INF/classes, server /lib veya yapışkan notlar/TOTEM /lib. Eğer propertiesfile web özel ise, en iyi /WEB-INF/classes yerleştirmek. Eğer bir IDE standart SAVAŞ bir proje geliştiriyorsanız, src klasör (projenin kaynak klasörü) içine at. Eğer Maven projesi kullanıyorsanız, /main/resources klasör içine at.

    Alternatif olarak da bir yerde varsayılan sınıf dışarı çıkar ve appserver sınıf için kendi yolunu ekleyebilirsiniz. Örneğin Tomcat Tomcat/conf/catalina.properties shared.loader özellik olarak yapılandırabilirsiniz.

    Eğer foo.properties koyduysanız com.example, sonra bir Java paket yapısı içinde aşağıdaki gibi yüklemek gerekiyor

    ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
    Properties properties = new Properties();
    properties.load(classLoader.getResourceAsStream("com/example/foo.properties"));
    

    İçerik sınıf loader bu yolda / ile başlaması gerektiğini unutmayın. "SomeClass.class.getClassLoader(), sonra senin gibi sınıf yükleyicisi gerçekten /. bir ile başlamak gerekir "göreceli bir kullanıyorsun sadece

    ClassLoader classLoader = getClass().getClassLoader();
    Properties properties = new Properties();
    properties.load(classLoader.getResourceAsStream("/com/example/foo.properties"));
    

    Ancak, özellikleri görünürlük söz konusu sınıf loader bağlı dosya. Sınıfının dolu olan aynı sınıf yükleyicisi olarak sadece görülebilir. İçerik sınıf yükleyicisi "" sınıf içinde. her yerde dosya özellikleri yer böylece en güvenli bahistir


  2. Webcontent koywebcontent-göreli bir yol ile ServletContext#getResourceAsStream() ile yükleyebilirsiniz , böylece:

    Properties properties = new Properties();
    properties.load(getServletContext().getResourceAsStream("/WEB-INF/foo.properties"));
    

    Erişilebilir herhangi bir tarayıcı tarafından ortak olurdu aksi takdirde /WEB-INF klasör, dosya koymanız için göstermiştir unutmayın. Ayrıca ServletContext HttpServlet sınıf GenericServlet#getServletContext() miras ile sadece erişilebilir olduğunu unutmayın.


  3. Yerel disk dosya sistemi koyBu mutlak bir yerel diskteki dosya sistemi yolu ile java.io her zamanki gibi yükleyebilirsiniz , böylece:

    Properties properties = new Properties();
    properties.load(new FileInputStream("/absolute/path/to/foo.properties");
    

    Mutlak bir yol kullanmanın önemini unutmayın. Göreli yerel disk dosya sistemi yolları mutlak bir no-go Java EE web uygulaması. Ayrıca bakınız ilk "de" aşağıda link.


Sadece ağır bastığı avantajları/dezavantajlarıseninidame kendi görüşüm.

Eğer özellikleri dosyaları "asla çalışma zamanı sırasında değişmesi gerekiyor, sonra SAVAŞTA alabilirsin." statik ise

Eğer tercih yapabilir düzenleme özellikleri dosyalarından dışında web uygulama olmadan ihtiyacı için yeniden ve yeniden dağıtın SAVAŞ her zaman, o zaman bu sınıf dışında proje (gerekirse ekleyin dizine sınıf).

Eğer varsa özellikleri dosyaları web uygulama içinden programlı Properties#store() yöntemi kullanarak düzenlemek için güçlü olmak isterseniz, web uygulama dışında koy. Bu gibi Properties#store()* *36, dosya sistemi kullanarak duramazsın bir yol gerektirir. Bu yolu açmak VM bir tartışma ya da sistem özelliği olarak web uygulamaya geçirilebilir. , never use getRealPath() önlem olarak. Dağıtmak Klasördeki tüm değişiklikler, orijinal SAVAŞ dosya geri yansıtılan basit bir nedenden dolayı bir yeniden başlatma üzerinde kaybolacaktır.

Ayrıca Bkz:

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Angry Paintballer

    Angry Paintb

    8 Ocak 2012
  • EatingIn

    EatingIn

    12 EKİM 2013
  • placeboing

    placeboing

    7 Mart 2006