2008-09-03 30 views
4

Weblet API'sinde web.xml'de (başlangıç ​​parametreleri gibi) belirtilen özelliklere web sitesiyle ilişkilendirilmemiş bir Bean veya Factory sınıfından erişmenin herhangi bir yolu var mı?Bir Java Bean'den web.xml özelliklerine erişmenin bir yolu var mı?

Örneğin, bir Factory sınıfı yazıyorum ve hangi uygulama sınıfının başlatılacağını belirlemek için hangileri varsa kullanılabilir bir dosya ve yapılandırma konumları hiyerarşisini kontrol etmek için Fabrika içinde bazı mantık eklemek istiyorum. - başka bir şey varsa, örneğin

  1. bir özellikler
  2. bir web.xml parametresi
  3. bir sistem özelliği veya
  4. , sınıf yolunda bazı varsayılan mantığı dosya. kod Servlet Konteyner ok dışında çalıştırmak mümkün olmalıdır -

benim Fabrikası'na benzer ServletConfig veya herhangi bir şey için herhangi bir referans enjekte olmadan bunu yapabilmek istiyorum.

Bu biraz kulağa hoş gelebilir, ancak bu bileşen için web paketlerimizden biri ile paketlenebilmek için üzerinde çalışıyorum ve ayrıca bazı komutlarımızla paketlenecek kadar çok yönlü olacağım. - sadece benim bileşenim için yeni özellikler dosyası gerektirmeden satır içi araçlar - bu yüzden web.xml gibi diğer yapılandırma dosyalarının üstüne atlamayı umuyordum. Doğru hatırlıyorsam

, .NET şu anda Request yürütülmesi için bir başvuru almak için Request.GetCurrentRequest() gibi bir şey var - ama bu yana ServletConfig erişmek için kullanılabilecek simliar şey arıyorum bir Java uygulaması.

cevap

5

bir yolu olan bir süre yapmaya çalışıyorlar şeydir bağlam oluşturulduktan sonra sizin web.xml

<listener> 
    <listener-class>com.acme.FactoryInitialisingServletContextListener<listener-class> 
</listener> 

Başvurunuz bir web kapta çalışıyorsa, o zaman dinleyici konteyner tarafından çağrılır. Bu durumda, _servletContextProperties, web.xml'de belirtilen herhangi bir bağlam-paramıyla değiştirilecektir. Uygulamanız bir web kapsayıcısı dışında çalışıyorsa, _servletContextProperties boş olacaktır.

1

Bunun için Bahar çerçevesini kullanmayı düşündünüz mü? Böylelikle, fasulyeleriniz fazladan herhangi bir kıpırtıyamaz ve bahar sizin için konfigürasyon kurulumunu gerçekleştirir.

0

ServletConfig (veya ServletContext) öğesine başvuru yapan ve bu değerleri Factory sınıfına gönderen ilişkili bir bootstrap sınıfı eklemeniz gerekeceğini düşünüyorum. En azından bu şekilde ayrı olarak paketleyebilirsiniz.

@toolkit: -:

public class FactoryInitialisingServletContextListener implements ServletContextListener { 

    public void contextDestroyed(ServletContextEvent event) { 
    } 

    public void contextInitialized(ServletContextEvent event) { 
     Properties properties = new Properties(); 
     ServletContext servletContext = event.getServletContext(); 
     Enumeration<?> keys = servletContext.getInitParameterNames(); 
     while (keys.hasMoreElements()) { 
      String key = (String) keys.nextElement(); 
      String value = servletContext.getInitParameter(key); 
      properties.setProperty(key, value); 
     } 
     Factory.setServletContextProperties(properties); 
    } 
} 

public class Factory { 

    static Properties _servletContextProperties = new Properties(); 

    public static void setServletContextProperties(Properties servletContextProperties) { 
     _servletContextProperties = servletContextProperties; 
    } 
} 

Sonra şu var, en aciz Mükemmel Bu Bunu yapabileceğini

İlgili konular