1. แนวคิดพื้นฐาน
ผู้ฟังใน Javaweb ถูกนำไปใช้ผ่านรูปแบบการออกแบบผู้สังเกตการณ์ เกี่ยวกับโหมดผู้สังเกตการณ์ฉันจะไม่แนะนำมากเกินไปที่นี่ดังนั้นฉันจะพูดคุยเกี่ยวกับความหมายของมัน
โหมดผู้สังเกตการณ์เรียกอีกอย่างว่าการเผยแพร่โหมดการสมัครสมาชิกหรือโหมดฟัง มีสองอักขระในโหมดนี้: ผู้สังเกตการณ์และผู้สังเกตการณ์ (มักเรียกว่าเรื่อง) ผู้สังเกตการณ์ลงทะเบียนเหตุการณ์ที่น่าสนใจในหัวข้อ เมื่อเหตุการณ์นี้เกิดขึ้นหัวข้อจะแจ้งผู้สังเกตการณ์ผ่านอินเตอร์เฟสการโทรกลับ
ให้ฉันยกตัวอย่างในชีวิต: สมัครรับหนังสือพิมพ์ ครอบครัวหรือบุคคลใด ๆ สามารถสมัครรับหนังสือพิมพ์กับหนังสือพิมพ์ ที่นี่หนังสือพิมพ์เป็น "ธีม" และครอบครัวคือ "ผู้สังเกตการณ์" ตัวอย่างเช่นหากครอบครัวต้องการสมัครสมาชิกหนังสือพิมพ์ในเช้าวันพรุ่งนี้นี่เป็น "เหตุการณ์" เช้าวันรุ่งขึ้นหนังสือพิมพ์ถูกสร้างขึ้นและนี่คือ "เหตุการณ์" เมื่อเหตุการณ์เกิดขึ้นหนังสือพิมพ์จะส่งหนังสือพิมพ์ไปยังกล่องจดหมายบ้านซึ่งเป็น "อินเทอร์เฟซโทรกลับ"
สำหรับผู้ฟังใน Javaweb ข้อมูลจำเพาะของ Servlet กำหนดคอลัมน์บางส่วนของคลาสอินเตอร์เฟสผู้ฟังเปิดเผยเหตุการณ์ไปยังแอปพลิเคชันผ่านคลาสอินเตอร์เฟส หากแอปพลิเคชันต้องการฟังเหตุการณ์ที่น่าสนใจไม่จำเป็นต้องลงทะเบียนเหตุการณ์ที่เกี่ยวข้องโดยตรง แต่มันเขียนผู้ฟังของตัวเองเพื่อใช้คลาสอินเตอร์เฟสที่เกี่ยวข้องและลงทะเบียนผู้ฟังของตัวเองไปยังคอนเทนเนอร์ Servlet เมื่อเหตุการณ์ที่โปรแกรมใส่ใจเกี่ยวกับการเกิดขึ้นคอนเทนเนอร์ servlet จะแจ้งผู้ฟังและโทรกลับวิธีการในผู้ฟัง ผู้ฟังที่กำหนดเองนี่คือผู้สังเกตการณ์และคอนเทนเนอร์ servlet เป็นธีม
2. การวิเคราะห์ตัวอย่าง
ดังที่ได้กล่าวมาแล้วคอนเทนเนอร์ Servlet จะเปิดเผยเหตุการณ์ไปยังแอปพลิเคชันผ่านคลาสอินเตอร์เฟสฟัง ดังนั้นเราจึงไม่ค่อยเกี่ยวกับการลงทะเบียนกิจกรรม แต่เป็นการลงทะเบียนผู้ฟัง ขั้นตอนการเขียนโปรแกรมที่สอดคล้องกันคือ: 1 เขียนผู้ฟังของคุณเองและใช้อินเทอร์เฟซผู้ฟังเฉพาะ 2. ลงทะเบียนผู้ฟังของคุณใน web.xml นี่คือตัวอย่างของอินเทอร์เฟซ Listener ที่ง่ายที่สุด servletContextListener:
1.TestListener.java
Public Class TestListener ใช้ ServletContextListener {Public TestListener () {} โมฆะสาธารณะบริบทบริบท (ServletContextEvent SCCE) {System.out.println ("ServletContextListener.ContextInitialized"); {System.out.println ("ServletContextListener.ContextDestroyed");}}2.web.xml
<Sistener> <Sistener-Lass> com.nantang.listener.testlistener </Listener-Class> </Listener>
เมื่อคอนเทนเนอร์เริ่มต้นขึ้น "ServletContextListener.ContextInitialized" จะถูกส่งออกไปยังบันทึกและเมื่อคอนเทนเนอร์ถูกปิด "ServletContextListener.ContextDestroyed" จะถูกส่งออก คำอธิบายโดยละเอียดจะได้รับการวิเคราะห์เพิ่มเติมในภายหลัง
ควรสังเกตที่นี่ว่าถ้าคุณแสดงตัวอย่างข้างต้นใน IDE (Eclipse, STS ฯลฯ ) เมื่อเริ่มต้นเซิร์ฟเวอร์คุณจะเห็น "ServletContextListener.ContextInitialized" ในคอนโซลและเมื่อปิดเซิร์ฟเวอร์ นี่ไม่ใช่วิธีการบริบทที่ถูกทำลาย แต่ไม่ได้ดำเนินการ แต่ IDE ไม่ได้ใช้งานได้อย่างสมบูรณ์แบบ ในการตรวจสอบว่ามีการเรียกบริบทว่าคุณสามารถเขียนโค้ดหนึ่งชิ้นในบริบทเพื่อส่งออกเนื้อหาของไฟล์แทนการส่งออกไปยังคอนโซล
3. การวิเคราะห์รหัสที่มา
ตอนนี้เรามาวิเคราะห์ว่าเหตุการณ์ที่ข้อกำหนดของ Servlet กำหนดไว้สำหรับเรา แม่นยำยิ่งขึ้นซึ่งมีการกำหนดอินเทอร์เฟซการฟัง การแนะนำตัวต่อไปนี้ขึ้นอยู่กับข้อกำหนดของ Servlet 3.0
servlet3.0 ให้เรามีอินเทอร์เฟซผู้ฟัง 8 คนซึ่งสามารถแบ่งออกเป็นสามหมวดหมู่ตามขอบเขตของพวกเขา:
1. อินเทอร์เฟซการฟังที่เกี่ยวข้องกับบริบทของ Servlet รวมถึง: ServletContextListener และ ServletContextattributelistener
2. อินเทอร์เฟซการฟังที่เกี่ยวข้องกับเซสชันของ HTTP รวมถึง: HttpsessionListener, HttpsessionActivationListener, HttpsessionAttributelistener และ HttpsessionBindingListener
3. อินเทอร์เฟซการฟังที่เกี่ยวข้องกับคำขอ servlet รวมถึง: servletrequestlistener และ servletrequestattributelistener
ในความเป็นจริงจากการตั้งชื่อของอินเทอร์เฟซคุณควรจะสามารถเดาฟังก์ชั่นพื้นฐานของมันได้ มาอธิบายตามหมวดหมู่ด้านล่าง
1. อินเทอร์เฟซการฟังที่เกี่ยวข้องกับบริบท
เมื่อแนะนำ servlets มาก่อนเราอธิบายว่าแอปพลิเคชันเว็บสอดคล้องกับบริบทของเซิร์ฟเล็ต ดังนั้นช่วงชีวิตของเหตุการณ์ที่ฟังโดย ServletContextListener และ ServletContextattributelistener ทำงานผ่านเว็บแอปพลิเคชันทั้งหมด ด้านล่างนี้คือความสัมพันธ์แบบลำดับชั้นของไดอะแกรมระหว่างอินเทอร์เฟซทั้งสองนี้
1.1 EventListener
EventListener เป็นอินเตอร์เฟสแท็กและผู้ฟังเหตุการณ์ทั้งหมดจะต้องสืบทอดอินเทอร์เฟซนี้ นี่คือข้อกำหนด servlet และไม่มีคำอธิบาย
1.2 EventObject
เช่นเดียวกับ EventListener EventObject เป็นคลาสระดับเหตุการณ์และคลาสเหตุการณ์เฉพาะทั้งหมดจะต้องสืบทอด EventObject
Public Class EventObject ดำเนินการ java.io.serializable {แหล่งที่มาของวัตถุชั่วคราวที่ได้รับการป้องกัน; eventObject สาธารณะ (แหล่งที่มาของวัตถุ) {ถ้า (แหล่งที่มา == null) โยน unledalargumentException ใหม่ ("แหล่งที่มา null"); this.source = แหล่งที่มา; -คลาสนี้ง่ายมากสาระสำคัญของมันเป็นเพียงสิ่งเดียว: แหล่งที่มา ผ่านชื่อคลาส EventObject และแหล่งที่มาชื่อคุณสมบัติคุณจะเห็นว่าคลาสนี้ทำสิ่งหนึ่งโดยถือ "แหล่งข้อมูลเหตุการณ์"
1.3 ServletContextEvent
คลาสสาธารณะ servletContextEvent ขยาย java.util.eventObject {public servletContextEvent (ServletContext Source) {super (แหล่งที่มา);} public ServletContext GetServletContext () {return (servletContext) super.getSource ();}}}}}}เหตุการณ์บริบทของ Servlet คลาสเหตุการณ์นี้เป็นมรดกที่ง่ายของ EventObject อินสแตนซ์ servletContext นั้นมีให้เป็นแหล่งเหตุการณ์ในตัวสร้าง เนื่องจากแหล่งที่มาของเหตุการณ์เป็นบริบท servlet จึงมีให้ GetServletContext เพื่อรับอินสแตนซ์ ServletContext
เมื่อเราอธิบายชั้นเรียนเหตุการณ์อื่น ๆ ในอนาคตพวกเขาทั้งหมดเป็นแม่พิมพ์เดียวกัน แต่ละคลาสเหตุการณ์มีวิธีการก่อสร้างที่สอดคล้องกันผ่านในวัตถุแหล่งที่มาที่สอดคล้องกันและให้วิธีการเพิ่มเติมเพื่อให้ได้แหล่งที่มาของเหตุการณ์ ดังนั้น EventObject จึงเป็นคลาสพื้นฐานของแหล่งเหตุการณ์ สาระสำคัญของคลาสย่อยของเหตุการณ์ทั้งหมดทำสิ่งหนึ่งกำหนดวัตถุแหล่งที่มาเฉพาะ
ดังนั้นสถานที่ที่เราจะอธิบายเหตุการณ์ในภายหลังผ่านไป
1.4 ServletContextListener
อินเทอร์เฟซสาธารณะ servletContextListener ขยาย eventListener {โมฆะสาธารณะบริบท (servletContextEvent SCE); void public ContextDestroyed (ServletContextEvent SCE);}อินเทอร์เฟซบริบทของ Servlet Context สอดคล้องกับสองเหตุการณ์: เหตุการณ์การเริ่มต้นบริบทของ Servlet และเหตุการณ์การปิดบริบท servlet
เมื่อเว็บแอปพลิเคชันเริ่มต้นแล้วคอนเทนเนอร์ servlet จะสร้างอินสแตนซ์ servletContextEven และโทรกลับวิธีบริบท
เมื่อบริบท servlet กำลังจะถูกปิดโดยปกติก่อนที่จะปิดเซิร์ฟเวอร์คอนเทนเนอร์ servlet จะสร้างอินสแตนซ์ servletcontexteven และโทรกลับวิธีบริบทที่ถูกทำลาย ควรสังเกตที่นี่ว่าการดำเนินการของวิธีการบริบทจะดำเนินการหลังจาก servlets และตัวกรองทั้งหมดได้เสร็จสิ้นวิธีการทำลาย
ดังนั้นหากเราต้องการทำอะไรบางอย่างเมื่อแอปพลิเคชันเริ่มต้นหรือปิดเราจะเขียนผู้ฟังของเราเองเพื่อใช้อินเทอร์เฟซ
ผู้ฟังเหตุการณ์ทั้งหมดเป็นรุ่นเดียวกัน เมธอดอินเตอร์เฟสการโทรกลับเหตุการณ์ที่สอดคล้องกันถูกกำหนดตามข้อกำหนดของ Servlet พารามิเตอร์รายการเมธอดคืออินสแตนซ์ของเหตุการณ์ที่สอดคล้องกัน ดังนั้นเราจะผ่านสถานที่ที่เราจะอธิบายจอภาพในภายหลัง
1.5 ServletContextattributeEvent
คลาสสาธารณะ servletContextattributeEvent ขยาย servletContextEvent {ชื่อสตริงส่วนตัว; ค่าวัตถุส่วนตัว; public ServletContextattributeEvent (ServletContext แหล่งที่มาชื่อสตริงค่าวัตถุ) {super (แหล่งที่มา); this.name = name; this.value = value; -ServletContextattributeEvent แสดงถึงเหตุการณ์ที่เกี่ยวข้องกับแอตทริบิวต์บริบท servlet โดยทั่วไปเหตุการณ์จะถูกทริกเกอร์เมื่อแอตทริบิวต์เปลี่ยนแปลง คลาสนี้สืบทอด ServletContextEven และแหล่งเหตุการณ์ยังเป็นอินสแตนซ์ ServletContext มีวิธีการเพิ่มเติมสำหรับการได้รับชื่อแอตทริบิวต์และค่าแอตทริบิวต์
1.6 ServletContextattributelistener
อินเตอร์เฟสสาธารณะ servletContextattributelistener ขยาย eventListener {โมฆะสาธารณะ attributeDded (servletContextattributeEvent Scab); โมฆะสาธารณะ attributeRemoved (ServletContextattributeEvent Scab); Void Public AttributePlacedเมื่อแอตทริบิวต์ข้างต้นของ servlet ถูกเพิ่มลบหรือแก้ไขคอนเทนเนอร์ servlet จะสร้างวัตถุเหตุการณ์ ServletContextattributeEvent และโทรกลับวิธีการ attributedded, attributerEmoved และวิธีการที่ใช้งานตามลำดับ
สิ่งที่คุณต้องทราบที่นี่คือวิธีการที่ถูกวางจำหน่ายซึ่งโทรกลับเมื่อค่าของแอตทริบิวต์ถูกแทนที่ ในเวลานี้หากคุณเรียกวิธีการ ServletContextattributeEvent.getValue () การส่งคืนคือการแทนที่ค่าแอตทริบิวต์ก่อนหน้า
2 http เซสชันอินเทอร์เฟซการฟังที่เกี่ยวข้อง
2.1 httpsessionEvent
ชั้นเรียนสาธารณะ httpsessionEvent ขยาย java.util.eventObject {public httpsessionEvent (แหล่งที่มา httpsession) {super (แหล่งที่มา);} public httpsession getSession () {return (httpsession) super.getSource ();}}}}}}}}}เหตุการณ์ที่เกี่ยวข้องกับเซสชัน HTTP ซึ่งจะถูกทริกเกอร์เมื่อเซสชันเปลี่ยนไป แหล่งที่มาของเหตุการณ์เป็นอินสแตนซ์ HTTPSESSION และให้วิธีการซื้อ HTTPSESSION เพิ่มเติม
2.2 httpsessionListener
อินเทอร์เฟซสาธารณะ httpsessionListener ขยาย eventListener {โมฆะสาธารณะ sessionCreated (httpsessionevent SE); โมฆะสาธารณะเซสชัน destroyed (httpsessionevent SE);}เมื่อเซสชันถูกสร้างและทำลายคอนเทนเนอร์ servlet จะสร้างวัตถุเหตุการณ์ HTTPSESSIPENTEVENT และเรียกใช้วิธีการเซสชันและเซสชันที่ถูกทำลาย
2.3 httpsessionactivationListener
ส่วนต่อประสานสาธารณะ httpsessionactivationListener ขยาย eventlistener {โมฆะสาธารณะเซสชัน Willpassivate (httpsessionEvent SE); โมฆะสาธารณะ sessionDidactivate (httpsessionEvent SE);}เมื่อเซสชันกำลังจะถูกผ่านหรือเปิดใช้งานคอนเทนเนอร์ Servlet จะสร้างวัตถุเหตุการณ์ HTTPSESSIPENTEVENT, การเรียกกลับเซสชัน WillPassivate และ SessionDidActivate
การใช้งานและการเปิดใช้งานมีการอธิบายที่นี่: การส่งสัญญาณหมายถึงหน่วยความจำของเซิร์ฟเวอร์ไม่เพียงพอหรือการหมดเวลากิจกรรมของเซสชันมาถึงและเซสชันที่ไม่ได้ใช้งานเมื่อเร็ว ๆ นี้จะถูกทำให้เป็นดิสก์ การเปิดใช้งานหมายความว่ามีการเข้าถึงเซสชันแบบพาสซีฟอีกครั้งโดย deserializing เซสชันจากดิสก์ไปยังหน่วยความจำ
จะเห็นได้ที่นี่ว่าเพื่อที่จะ passivate และเปิดใช้งานเซสชั่นจะต้องเป็นอนุกรมและ deserialized ก่อน ในเวลาเดียวกันในระหว่างกระบวนการเขียนโปรแกรมเราพยายามใช้วัตถุง่าย ๆ เช่นสตริงและจำนวนเต็มให้มากที่สุดและพยายามที่จะไม่ใช้คอลเลกชันเช่นรายการและแผนที่
2.4 httpsessionbindingevent
ชั้นเรียนสาธารณะ httpsessionBindingEvent ขยาย httpsessionEvent {ชื่อสตริงส่วนตัว; ค่าวัตถุส่วนตัว; public httpsessionbindingEvent (เซสชัน httpsession, ชื่อสตริง) {super (เซสชัน); this.name = name; ค่า;} public httpsession getSession () {return super.getSession ();} สตริงสาธารณะ getName () {ชื่อคืน;} วัตถุสาธารณะ getValue () {return this.value; -เหตุการณ์ที่เกี่ยวข้องกับแอตทริบิวต์เซสชัน HTTP จะถูกทริกเกอร์เมื่อแอตทริบิวต์เซสชันเปลี่ยนไป แหล่งที่มาของเหตุการณ์เป็นอินสแตนซ์ HTTPSESSION และให้วิธีการเพิ่มเติมเพื่อให้ได้ HTTPSESSION ชื่อแอตทริบิวต์และค่าแอตทริบิวต์
2.5 httpsessionattributelistener
อินเตอร์เฟสสาธารณะ httpsessionattributeListener ขยาย eventlistener {โมฆะสาธารณะ attributeDded (httpsessionbindingevent se); โมฆะสาธารณะ attributeremoved (httpsessionbindingevent SE); โมฆะสาธารณะเมื่อแอตทริบิวต์เซสชันถูกเพิ่มลบหรือแก้ไขคอนเทนเนอร์ servlet จะสร้างวัตถุเหตุการณ์ httpsessionBindingEvent และโทรกลับวิธีการรวมตัวกัน, attributeRemoved และวิธีการ attributeReplaced ตามลำดับ
สิ่งที่คุณต้องทราบที่นี่คือวิธีการที่ถูกวางจำหน่ายซึ่งโทรกลับเมื่อค่าของแอตทริบิวต์ถูกแทนที่ ในเวลานี้หากคุณเรียกวิธีการ ServletContextattributeEvent.getValue () การส่งคืนคือการแทนที่ค่าแอตทริบิวต์ก่อนหน้า
เมื่อวิธีการที่ไม่ถูกต้องของเซสชันถูกเรียกหรือเซสชันล้มเหลววิธี AttributerEmoved จะถูกเรียกกลับมา
2.6 httpsessionbindinglistener
อินเทอร์เฟซสาธารณะ httpsessionbindingListener ขยาย eventListener {void public valuebound (เหตุการณ์ httpsessionbindingevent); เหตุการณ์โมฆะสาธารณะ valueunbound (เหตุการณ์ httpsessionbindingevent);};ผู้ฟังนี้ยังรับฟังการเปลี่ยนแปลงในแอตทริบิวต์ของเซสชัน เมื่อแอตทริบิวต์เซสชันถูกเพิ่มและลบนั่นคือเมื่อค่าแอตทริบิวต์ถูกผูกไว้และค่าแอตทริบิวต์จะไม่ได้อยู่คอนเทนเนอร์ servlet จะสร้างวัตถุเหตุการณ์ HttpsessionBindingEvent และเรียกใช้วิธีการ ValueBound และ ValueUnBound ตามลำดับ
มันดูไม่แตกต่างจาก httpsessionattributelistener แต่มันไม่ใช่กรณี ความแตกต่างที่สำคัญอย่างหนึ่งระหว่างทั้งสองคือเงื่อนไขของการกระตุ้นเหตุการณ์
เมื่อมีการเปลี่ยนแปลงใด ๆ ในคุณสมบัติเซสชันคอนเทนเนอร์ servlet จะแจ้งให้ HTTPSESSIPINTTRIBUTELISTENER แต่สำหรับ httpsessionbindingListener คอนเทนเนอร์ servlet จะแจ้งให้ทราบเฉพาะในกรณีที่ค่าคุณสมบัติที่ถูกผูกไว้หรือไม่เบี่ยงเบนเป็นอินสแตนซ์ของผู้ฟัง ตัวอย่างเช่น:
Public Class TestListener ใช้ httpsessionBindingListener {@OverridePublic Void ValueBound (เหตุการณ์ httpsessionBindingEvent) {system.out.println ("httpsessionBindingListener.valueBound");}@overridepublic {system.out.println ("httpsessionbindingListener.valueunbound");}}เราปรับแต่ง TestListener ผู้ฟังให้ใช้ httpsessionBindingListener มาตั้งค่าแอตทริบิวต์เซสชันต่อไปนี้ในรหัส:
httpsession session = request.getSession (); testListener testListener = new TestListener (); session.setAttribute ("ผู้ฟัง", testListener); Session.RemoVeattribute ("ผู้ฟัง");นี่คือค่าแอตทริบิวต์ของเซสชันคืออินสแตนซ์ TestListener ของผู้ฟังของเรา ดังนั้นเมื่อมีการดำเนินการรหัสนี้คอนเทนเนอร์ servlet จะแจ้งให้ testListener และโทรกลับวิธี ValueBound และ ValueUnBound
ควรสังเกตที่นี่ว่าเมื่อมีการเรียกใช้วิธีการที่ไม่ถูกต้องของเซสชันหรือเซสชันล้มเหลววิธีการ ValueUnBound จะถูกเรียกกลับมา
3 อินเทอร์เฟซการฟังที่เกี่ยวข้องกับคำขอ Servlet
3.1 ServletRequestEvent
ระดับสาธารณะ ServletRequestEvent ขยาย java.util.eventObject {คำขอส่วนตัว servletrequest สาธารณะ servletrequestevent สาธารณะ (servletContext sc, คำขอ servletrequest) {super (sc); this.request = คำขอ; super.getSource ();}}เหตุการณ์ที่เกี่ยวข้องกับคำขอ servlet จะถูกเรียกใช้เมื่อคำขอเปลี่ยนแปลง แหล่งที่มาของเหตุการณ์เป็นอินสแตนซ์ servletContext และให้การดึงข้อมูลเพิ่มเติมของวิธีการ ServletContext และ ServletRequest
3.2 ServletRequestListener
อินเทอร์เฟซสาธารณะ servletrequestListener ขยาย eventListener {โมฆะสาธารณะขอ Destroyed (ServletRequestEvent SRE); โมฆะสาธารณะขอการร้องขอ (servletRequestEvent SRE);เมื่อคำขอเริ่มต้นหรือทำลายลูกค้าขอให้ป้อนเว็บแอปพลิเคชัน (ป้อน servlet หรือตัวกรองแรก) หรือเว็บแอปพลิเคชันส่งคืนการตอบกลับไปยังไคลเอนต์ (ออกจาก servlet หรือตัวกรองแรก) คอนเทนเนอร์ servlet สร้างอินสแตนซ์ servletrequestevent และโทรกลับวิธีการร้องขอและการร้องขอ
3.3 ServletRequestattributeEvent
ระดับสาธารณะ servletrequestattributeEvent ขยาย servletrequestevent {ชื่อสตริงส่วนตัวค่าวัตถุส่วนตัว; servletrequestattributeEvent (ServletContext Sc, คำขอ ServletRequest, ชื่อสตริง, ค่าวัตถุ) {super (sc, คำขอ); this.name = name; สิ่งนี้ค่า; -เหตุการณ์ที่เกี่ยวข้องกับการร้องขอ Servlet แอตทริบิวต์ซึ่งจะถูกเรียกใช้เมื่อแอตทริบิวต์คำขอเปลี่ยนแปลง แหล่งที่มาของเหตุการณ์เป็นอินสแตนซ์ servletContext และให้วิธีการเพิ่มเติมเพื่อรับชื่อแอตทริบิวต์และค่าแอตทริบิวต์
3.4 servletrequestattributelistener
อินเทอร์เฟซสาธารณะ servletrequestattributelistener ขยาย eventlistener {โมฆะสาธารณะ attributeDded (servletrequestattributeEvent Srae); โมฆะสาธารณะ attributeremoved (servletrequestattributeEvent Srae);เมื่อแอตทริบิวต์ที่ร้องขอถูกเพิ่มลบหรือแก้ไขคอนเทนเนอร์ servlet จะสร้างวัตถุเหตุการณ์ ServletRequestattributeEvent และโทรกลับวิธีการที่มีการรวมตัวกัน, attributeremoved และวิธีการตามลำดับ
สิ่งที่คุณต้องทราบที่นี่คือวิธีการที่ถูกวางจำหน่ายซึ่งโทรกลับเมื่อค่าของแอตทริบิวต์ถูกแทนที่ ในเวลานี้หากคุณเรียกวิธีการ ServletRequestattributeEvent.getValue () การส่งคืนคือการแทนที่ค่าแอตทริบิวต์ก่อนหน้า
4. สรุป
ณ จุดนี้ผู้ฟังพูดจบ เราสามารถพบว่าผู้ฟัง servlet และตัวกรองมีสิ่งหนึ่งที่เหมือนกันทั้งคู่ถูกกำหนดโดยคอนเทนเนอร์ เราแค่ต้องเขียนผู้ฟังของเราเองเพื่อใช้อินเทอร์เฟซผู้ฟังที่เราใส่ใจและลงทะเบียน ส่วนที่เหลือของงานคือการเขียนตรรกะทางธุรกิจในผู้ฟังของเราเอง
ผู้ฟังที่แนะนำในโพสต์บล็อกนี้ถูกกำหนดโดยข้อกำหนด Servlet 3.0 3.1 ได้เพิ่มอินเทอร์เฟซผู้ฟังเหตุการณ์บางส่วนและหลักการคล้ายกันผู้อ่านสามารถเข้าใจได้ด้วยตัวเอง