Java Bean’den web.xml
Özelliklerine Erişim: Pratik Bir Kılavuz
Java uygulamaları geliştirirken, özellikle hem web hem de bağımsız (standalone) ortamlarda çalışması hedeflenen uygulamalarda, web.xml
dosyasında tanımlanan özelliklere erişmeniz gerektiğini görebilirsiniz. Ancak bu, bileşenleri Servlet konteynerinden kopararak tutmak istediğinizde karmaşık hale gelebilir. Bu blog yazısında, bu sorunu ele alacağız ve adım adım net bir çözüm sunacağız.
Sorun
Java geliştiricileri genellikle uygulamanın çalışması için kritik olan web.xml
dosyasında saklanan yapılandırma verilerine erişme ihtiyacı duyarlar; bu nedenle temiz bir mimariyi korumak önemlidir. Bu özellikle Factory sınıfları için geçerlidir; burada mantığınızı doğrudan Servlet API’ye bağlamak istemezsiniz. Bu gibi durumlarda, ServletConfig veya diğer web’e özgü nesnelere bağımlı olmak sınırlamalara ve engellere yol açabilir.
Factory sınıfınızda birden fazla yapılandırma kaynağını hiyerarşide incelemek için mantık eklemek isteyebilirsiniz:
- Classpath’teki bir properties dosyası
web.xml
‘den alınan başlangıç parametreleri- Sistem özellikleri
- Başka bir yapılandırma mevcut değilse varsayılan ayarlar
Amacı, hem bir web konteyneri içinde hem de komut satırı bağlamlarında kesintisiz çalışan bir sistem tasarlamaktır.
Çözüm
Bu sorunu şık bir şekilde çözmek için bir ServletContextListener
kullanabilirsiniz. İşte adım adım nasıl uygulayacağınız:
Adım 1: ServletContextListener’ı Oluşturun
Bu dinleyici, uygulama bağlamı başlatıldığında otomatik olarak çalışacak ve web.xml
‘de tanımlanan özellikleri çıkarabilecektir. İşte uygulaması:
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);
}
}
Adım 2: Factory Sınıfını Tanımlayın
Şimdi, daha sonra erişim için bu özellikleri tutacak basit bir Factory sınıfına ihtiyacımız var:
public class Factory {
static Properties _servletContextProperties = new Properties();
public static void setServletContextProperties(Properties servletContextProperties) {
_servletContextProperties = servletContextProperties;
}
}
Adım 3: web.xml
‘i Güncelleyin
Şimdi, bu dinleyiciyi web uygulamanızla entegre etmek için web.xml
‘de kaydetmeniz gerekiyor:
<listener>
<listener-class>com.acme.FactoryInitialisingServletContextListener</listener-class>
</listener>
Nasıl Çalışır
- Web uygulaması dağıtıldığında,
FactoryInitialisingServletContextListener
web konteyneri tarafından tetiklenir. contextInitialized
yönteminde,web.xml
‘de tanımlanan tüm bağlam parametrelerini toplar ve birProperties
nesnesine yerleştirir.Properties
nesnesi daha sonraFactory
içinde saklanır ve uygulamanızın herhangi bir yerinde erişilebilir hale gelir.
Web Konteynerinin Dışında Çalışma
Uygulamanız gerçek bir web konteynerinin dışında çalışıyorsa, _servletContextProperties
basitçe boş kalır ve böylece uygulamanızın Servlet API’sine ağır bağımlılıklar olmadan işlevselliğini korumasına olanak tanır.
Sonuç
Bu yaklaşım, web.xml
özelliklerine Java Bean veya Factory sınıfından erişmenin temiz ve etkili bir yolunu sunar. Kodunuzu Servlet konteynerine sıkı bağlı olmadan tutarken, bir ServletContextListener
kullanarak uygulama yapılandırmalarını şık bir şekilde yönetebilirsiniz. Hem web uygulamaları hem de bağımsız komut satırı araçları için çok yönlülük sağlarken, uygulama yapılandırmalarınızı yönetmenin etkili bir yolunu arıyorsanız, bu strateji uygulanmalıdır!