2013-07-21 12 views
31

Baştan ilk JSP ve servletleri okuyorum. Farklı türde dinleyicilerden geçerek, HttpSessionBindingListener ve HttpSessionAttributeListener ile karşılaştım.HttpSessionBindingListener'ın ve HttpSessionAttributeListener'ın Pratik Kullanımı

İkisi arasındaki farkı düşünüyordum - bu iki dinleyicinin gerçek dünya örneklerinde pratik kullanımlarını görmek istiyorum. HttpSessionBindingListener'u valueBound() ve valueUnBound() uygulayarak test ettim - bir nesnenin eklenmiş olup olmadığını bilmek neden gerekir?

Pratik kullanımlarla ilgili oldukça kafam karıştı. Lütfen bunu açıklığa kavuşturmaya yardımcı olun. HttpSessionBindingListener

cevap

41

olan örneklerini giriş yapmış bir kullanıcı olarak oturumda depolanabilir sınıf uygulanacaktır.

E.g. Bu ActiveUser örneğidir HttpSession#setAttribute() tarafından bir oturum özelliği olarak ayarlanır zamam

public class ActiveUser implements HttpSessionBindingListener { 

    @Override 
    public void valueBound(HttpSessionBindingEvent event) { 
     logins.add(this); 
    } 

    @Override 
    public void valueUnbound(HttpSessionBindingEvent event) { 
     logins.remove(this); 
    } 

} 

ardından valueBound() çağrılır. Ne zaman HttpSession#removeAttribute(), ya da oturumun bir geçersiz kılma tarafından kaldırılır, ya da başka bir HttpSession#setAttribute() ile değiştirilir, o zaman valueUnbound() çağrılır.

: Burada

bazı gerçek dünya kullanım durumları vardır herhangi özelliği, ilave kaldırılması veya HttpSession olarak değiştirildiğinde çağrılır olsun @WebListener geniş bir uygulama olarak uygulanacaktır. Yukarıdaki ActiveUser örneğiyle devam ederseniz, HttpSessionBindingListener'u uygulamak için ActiveUser sınıfını değiştiremediyseniz (veya 3. taraf olduğu için) veya isteğe bağlı bir miktarda "işaretçi arabirimi" kullanmak istediğinizde bu özellikle yararlıdır. Böylece dinleme işini tek bir merkezi yerde yapabilirsiniz.

+0

Çok teşekkürler @BalusC:

@WebListener public class ActiveUserListener implements HttpSessionAttributeListener { @Override public void attributeAdded(HttpSessionBindingEvent event) { if (event.getValue() instanceof ActiveUser) { logins.add(event.getValue()); } } @Override public void attributeRemoved(HttpSessionBindingEvent event) { if (event.getValue() instanceof ActiveUser) { logins.remove(event.getValue()); } } @Override public void attributeReplaced(HttpSessionBindingEvent event) { if (event.getValue() instanceof ActiveUser) { logins.add(event.getValue()); } } } 

Size gerçek dünyadan kullanım vakası. Farkı anladım. Detaylı cevap için çok teşekkürler. – benz

+0

Bu harika bir cevap. @BalusC Bütün bu bilgiyi almayı ve böyle güzel bir şekilde sunmayı nasıl başarabilirsiniz? – Makky

+0

Rica ederim. – BalusC