Servlet: Listener

listener class เป็นคลาสที่มีลักษณะเป็น event-driven คือ method ที่อยู่ใน listener จะต้องถูกเรียกโดยอัตโนมัติ มีการเหตุการณ์เกิดขึ้น ซึ่งแต่ละ class ก็จะ support event ที่แตกต่างกันไป



ที่เราเห็นใช้กันบ่อยหน่อย ก็คงจะเป็น ServletContextListener ซึ่งจะ support event ที่เกี่ยวกับการ initialize และ destroy context หรือเมื่อเรา deploy application เราขึ้นไปบน web container หรือตอนที่ เรา undeploy หรือตอนที่ server start หรือ clash ก็จะมีการเรียก class นี้ไปใช้ ส่วน ServletContextAttributeListener ก็จะเป็นคลาสที่ทำงานเมื่อการมี add, remove, replace attribute เข้าไปที่ context (ดังนั้นจะต้องเป็น attribute ที่เป็น context scope เท่านั้น)

ส่วน ServletRequestListener และ ServletRequestAttributeListener ก็จะคล้ายกัน คือ สำหรับเมื่อมี request เกิดขึ้น หรือก่อนที่ request จะจบ และเมื่อมีการเปลี่ยนแปลงของ attribute ใน request (page scope)

ส่วนอีก 4 listener ที่เหลือ คือ HttpSessionListener, HttpSessionAttributeListner และ HttpSessionActivationListener, HttpSessionBindingListener ก็จะเป็น listener ที่เกี่ยวกับ session โดย 2 อันแรก จะคล้ายกับที่กล่าวมาข้างต้น คือเกี่ยวกับ สร้าง/ทำลาย session และเกี่ยวกับ add, remove, replace ของ session attribute

สำหรับ HttpSessionActivationListener จะเกี่ยวพันถึงการ migrate session ข้าม jvm (สำหรับบางกรณี เช่นการทำ load-balancing) และ HttpSessionBindingListener จะคล้ายกับ HttpSessionAttributeListener แต่ต่างกันที่เป็น listener ที่จะ implement โดย attribute class คือมันจะ notify ที่ attribute ที่ implement มัน เมื่อ attribute นั้นๆ ถูกผูกเข้ากับ session หรือโยนออกจาก session

ซึ่ง listener class ส่วนใหญ่จะต้อง declare ไว้ใน DD (web.xml) ยกเว้น HttpSessionBindingListener ที่ไม่ต้องใส่ไว้ใน DD

ListenerDescriptionmethod
javax.servlet.
ServletContextListener
support event ที่เกี่ยวกับการ initialize และ destroy context หรือเมื่อเรา deploy application เราขึ้นไปบน web container หรือตอนที่ เรา undeploy หรือตอนที่ server start หรือ clash ก็จะมีการเรียก class นี้ไปใช้contextInitialized(ServletContextEvent)
contextDestroyed(ServletContextEvent)
javax.servlet.
ServletContextAttributeListener
ทำงานเมื่อการมี add, remove, replace attribute เข้าไปที่ contextattributeAdded(ServletContextAttributeEvent)
attributeRemoved(ServletContextAttributeEvent)
attributeReplaced(ServletContextAttributeEvent)
javax.servlet.
ServletRequestListener
เมื่อมี request เกิดขึ้น หรือก่อนที่ request จะจบ requestInitialized(ServletRequestEvent)
requestDestroyed(ServletRequestEvent)
javax.servlet.
ServletRequestAttributeListener
เมื่อมีการเปลี่ยนแปลงของ attribute ใน request
attributeAdded(ServletRequestAttributeEvent)
attributeRemoved(ServletRequestAttributeEvent)
attributetReplaced(ServletRequestAttributeEvent)
javax.servlet.http.
HttpSessionListener
เกี่ยวกับ สร้าง/ทำลาย sessionsessionCreated(HttpSessionEvent)
sessionDestroyed(HttpSessionEvent)
javax.servlet.http.
HttpSessionAttributeListner
เกี่ยวกับ add, remove, replace ของ session attributeattributeAdded(HttpSessionBindingEvent)
attributeRemoved(HttpSessionBindingEvent)
attributeReplaced(HttpSessionBindingEvent)
javax.servlet.http.
HttpSessionActivationListener
จะเกี่ยวพันถึงการ migrate session ข้าม jvm (สำหรับบางกรณี เช่นการทำ load-balancing)sessionDidActivate(HttpSessionEvent)
sessionWillPassivate(HttpSessionEvent)
javax.servlet.http.
HttpSessionBindingListener
คล้ายกับ HttpSessionAttributeListener แต่ต่างกันที่เป็น listener ที่จะ implement โดย attribute class คือมันจะ notify ที่ attribute ที่ implement มัน เมื่อ attribute นั้นๆ ถูกผูกเข้ากับ session หรือโยนออกจาก sessionvalueBound(HttpSessionBindingEvent)
valueUnbound(HttpSessionBindingEvent)

No comments:

Post a Comment