1. Listener yang mendengarkan perubahan properti di objek domain
Pendengar acara untuk mengubah atribut dalam objek domain adalah pendengar untuk mendengarkan acara informasi perubahan atribut di tiga objek: servletcontext, httpsession, dan httpservletRequest.
Tiga antarmuka pendengar ini adalah ServletContextAttributeListener, httpsessionattributeListener dan servletRequestAttributeListener. Ketiga antarmuka mendefinisikan tiga metode untuk menangani peristiwa yang meningkatkan, menghapus dan mengganti atribut dalam objek yang didengarkan. Nama metode yang sesuai dari peristiwa yang sama di ketiga antarmuka ini persis sama, tetapi parameter yang diterima berbeda.
1.1. Metode yang diatribusikan
Saat menambahkan atribut ke objek yang didengarkan, wadah web merespons dengan memanggil metode yang dikaitkan dengan pendengar acara. Metode ini menerima parameter jenis acara. Pendengar dapat memperoleh objek domain yang menambahkan atribut dan objek atribut yang disimpan dalam domain. Definisi sintaks lengkap dari setiap pendengar atribut domain adalah sebagai berikut:
public void atributeadded (servletContextattributeEvent scae) public void attributeReplaced (httpsessionBindingEvent hsbe) public void attributermoved (servletRequestAttributeEvent srae)
1.2. Metode atributeremoved
Saat menghapus atribut di objek yang didengarkan, wadah web memanggil metode AtributeMoved dari pendengar acara untuk menanggapi definisi sintaks lengkap dalam pendengar atribut di setiap domain:
public void attruthuteremoved (servletcontextattributeEvent scae) public void attributereMoved (httpsessionBindingEvent hsbe) public void atributeremoved (servletRequestAttributeEvent srae)
1.3. Metode AttributeReplaced
Ketika atribut tertentu dalam objek domain pendengar diganti, wadah web memanggil metode atributeplaced dari pendengar acara untuk menanggapi definisi sintaks lengkap di setiap pendengar atribut domain:
public void atributePlaced (servletContextattributeEvent scae) public void attributeReplaced (httpsessionBindingEvent hsbe) public void attributeReplaced (servletRequestAttributeEvent srae)
1.4. Contoh pendengar ServletContextAttributeListener:
Tulis pendengar ServletContextAttributEnterener untuk memantau perubahan nilai atribut objek domain ServletContext. Kodenya adalah sebagai berikut:
Paket me.gacl.web.listener; import java.text.messageformat; impor javax.servlet.servletcontextattributeEvent; import javax.servlet.servletcontextattributeerererer* @Author: Lonely canggang*@date: 2014-9-11 10:53:04 pm **/ kelas publik MySerVletContextAttributeRerer mengimplementasikan servletContextattributeReSter {@Override public void (servlextateTcatExtExtener {@Override public void (servleMonxtateTcatExter {@Override public domibute (servleForxtAxtate (string {@Override stringForm.spribute (servleFormatpatExten {@Override {@Override public. {0}, nilai atribut adalah: {1} ", scab.getName (), scab.getValue ()); System.out.println (str); } @Override public void atrutButeReMoved (servletContextAttributeEvent scab) {string str = messageFormat.Format ("Hapus atribut: {0} dalam objek domain ServletContext, nilai atribut adalah: {1}", scab.getname (), scab.getvalue ()); System.out.println (str); } @Override public void attributeReplaced (servletContextAttributeEvent scab) {string str = messageFormat.Format ("Nilai atribut: {0} diganti dalam objek domain servletContext", scab.getname ()); System.out.println (str); }}Daftarkan pendengar di file web.xml
<listener> <deskripsi> MySerVletContextAttributeListener Listener </cripence> <listener-class> me.gacl.web.listener.myservletcontextattributeListener </listener-class> </listener>
Tulis Halaman Tes ServletContextAttributeListenerTest.jsp
<%@ page language = "java" pageEncoding = "UTF-8"%> <! Doctype html> <html> <head> <title> servletcontextattributeListener test listener </iteme> </head> <%// add atribute application.setattribute ("name", "longyanglang"); // ganti nilai atribut nama dalam aplikasi domain aplikasi application.setAttribute ("name", "gacl"); // Hapus atribut nama dalam aplikasi domain aplikasi application.removeattribute ("name"); %> </body> </html>Hasil operasi adalah sebagai berikut:
Dari hasil yang sedang berjalan, kita dapat melihat bahwa pendengar ServletContextListener berhasil mendengarkan perubahan nilai properti dalam objek domain ServletContext (Aplikasi).
1.5. ServletRequestAttributeListener dan HttpSsionAttributeListener Listener Contoh:
Tulis pendengar untuk memantau perubahan dalam nilai atribut objek domain httpsession dan httpservletrequest, kode ini adalah sebagai berikut:
Paket me.gacl.web.listener; import java.text.messageFormat; import javax.servlet.servletrequestattributeEvent; import javax.servlet.servletrequestattributelistener; javax.servlet.http.HttpSessionBindingEvent;public class MyRequestAndSessionAttributeListener implements HttpSessionAttributeListener, ServletRequestAttributeListener { @Override public void attributeAdded(ServletRequestAttributeEvent srae) { String str =MessageFormat.format( "ServletRequest domain object has added Atribut: {0}, nilai atribut adalah: {1} ", srae.getName (), srae.getValue ()); System.out.println (str); } @Override public void atrutButeReMoved (servletRequestAttributeEvent srae) {string str = messageFormat.format ("Hapus atribut dalam objek domain servletRequest: {0}, nilai atribut adalah: {1}", srae.getName (), srae.getval adalah: {1}) (sraee.getname (), srae.getval (srae. System.out.println (str); } @Override public void attributeReplaced (servletRequestAttributeEvent srae) {string str = messageFormat.format ("Nilai atribut: {0} digantikan dalam objek domain servletRequest", srae.getName ()); System.out.println (str); } @Override public void atributeAdded (httpsessionBindingEvent SE) {string str = messageFormat.Format ("atribut: {0} ditambahkan ke" httpsession domain objek, nilai atribut adalah: {1} ", se.getName (), se.getValue ()); atrutButeReMoved (httpsessionBindingEvent SE) {string str = messageFormat.Format ("Atribut: {0} dihapus dari objek domain" httpsession, nilai atribut adalah: {1} ", se.getName (), se.getValue ()); System.out.println (str); } @Override public void attributeReplaced (httpsessionBindingEvent SE) {string str = messageFormat.Format ("Nilai atribut: {0} diganti dalam objek domain httpsession", se.getName ()); System.out.println (str); }}Daftarkan pendengar di file web.xml
<listener> <creckripe> myRequestandSessionAttributeListener listener </creckripe> <dresinger-class> me.gacl.web.listener.myrequestandSessionAttributeListener </listener-class> </listener>
Tulis permintaan dan halaman tes JSP
<%@ page language = "java" pageEncoding = "UTF-8"%> <! Doctype html> <html> <head> <title> requestandSessionAttributeListener test pendengar </iteme> </head> <%// tambahkan atribut sesi. // Ganti nilai atribut AA di sesi sesi session.setAttribute ("aa", "xx"); // Hapus AA Atribut Sesi.Removeattribute ("AA"); // Tambahkan atribut request.setAttribute ("aa", "bb"); // ganti nilai atribut AA dalam permintaan objek domain permintaan.setAttribute ("aa", "xx"); // Hapus permintaan atribut AA.removeattribute ("AA"); %> </body> </html>Hasil operasi adalah sebagai berikut:
Dari hasil yang dijalankan, kita dapat melihat bahwa pendengar HTTPSsionAttributEnterener dan ServletRequestAttributeRerener berhasil mendengarkan perubahan nilai atribut dari objek domain httpsession dan objek domain httpservletrequest.
2. Sadar akan pendengar acara terikat pada sesi
Objek yang disimpan dalam domain sesi dapat memiliki banyak status: mengikat (session.setAttribute ("bean", objek)) ke dalam sesi; unbinding (session.removeattribute ("bean")) dari domain sesi; bertahan untuk perangkat penyimpanan dengan objek sesi; Memulihkan dari perangkat penyimpanan dengan objek sesi. Dua antarmuka pendengar khusus "httpsessionBindingListener dan httpsessionactivationListener" didefinisikan dalam spesifikasi servlet untuk membantu objek Javabean memahami status mereka di domain sesi :, kelas yang mengimplementasikan kedua antarmuka ini tidak memerlukan pendaftaran dalam file web.xml.
2.1. Antarmuka httpsessionBindingListener
Objek Javabean yang mengimplementasikan antarmuka HTTPSessionBindingListener dapat merasakan bahwa itu terikat pada sesi dan dihapus peristiwa dalam sesi. Ketika objek terikat ke objek httpsession, server web memanggil void valueBound (httpsessionBindingEvent peristiwa) metode objek. Ketika objek tidak terikat dari objek httpsession, server web memanggil metode void valueunbound (httpsessionBindingEvent) dari objek.
contoh:
Paket Me.Gacl.Domain; impor javax.servlet.http.httpsessionBindingEvent; impor javax.servlet.http.httpsessionBindingListener;/*** @classname: JavaBeAnte1* @description:* The Javab Object -the Hoube -the HepersePene1 Peristiwa yang dihapus dari sesi ketika objek terikat ke objek httpsession, server web memanggil metode valueBound (peristiwa httpsessionBindingEvent) dari objek ketika objek terikat ke objek httpsession. Ketika tidak mengikat pada objek, server web memanggil metode valueUnbound objek (httpsessionBindingEvent) metode* @author: Lonely canggert* @Date: 2014-9-11 11:14:54 PM*/ Kelas Publik JavaBeanDemo1 mengimplementasikan httppppppppsesenerer {class public JavaBeAndemo1 httpppsessionBindingenerer {private STRIMER SRIVEED; @Override public void valueBound (acara httpsessionBindingEvent) {System.out.println (name+"ditambahkan ke sesi"); } @Override public void valueUnbound (acara httpsessionBindingEvent) {System.out.println (name+"dikeluarkan oleh sesi"); } public string getName () {return name; } public void setName (name string) {this.name = name; } public javabeandemo1 (name string) {this.name = name; }}Javabean Javabeandemo1 di atas mengimplementasikan antarmuka HttpsessionBindingListener, sehingga objek Javabean ini dapat merasakan bahwa itu terikat pada sesi dan dihapus dari sesi. Kode tes adalah sebagai berikut:
<%@ page language = "java" pageEncoding = "UTF-8"%> <%@ page Impor = "me.gacl.domain.javabeandemo1"%> <! Doctype html> <html> <title> </title> </head> <body> <%bodypet (body> <%body "BODEADET (BODEP//BIND THE PEMBUAT THE PEMBUAT THE JAVABEANDEK THE JAVABEANTIGED TE JAVABEANTEKUTIED TE JAVABEANTEK THE JABABEANTETE THE JABABEANTETE THE SESIEANDET <%/ Javabeandemo1 ("kesepian canggert")); // RemoveAttribute ("Bean"); %> </body> </html>Hasil operasi adalah sebagai berikut:
2.2. Antarmuka httpsessionactivationlistener
Objek JavaBean yang mengimplementasikan antarmuka HTTPSessionActivationListener dapat merasakan dirinya untuk diaktifkan (deserialized) dan peristiwa pasif (serial). Sebelum objek JavaBean yang terikat pada objek HTTPSESSESS akan dipasivasi (serial) dengan objek HTTPSESSION, server web memanggil metode void sesionwillpastivate (peristiwa httpsessionEvent) dari objek Javabean. Dengan cara ini, objek Javabean dapat mengetahui bahwa itu akan diserialisasi (pasif) ke hard disk dengan objek httpsession.
Setelah objek JavaBean terikat pada objek HTTPSESSION harus diaktifkan (deserialized) dengan objek HTTPSESSION, server web memanggil metode Void SesiesDidActive (HTTPSessionEvent Event) dari objek Javabean. Dengan cara ini, objek Javabean dapat mengetahui bahwa itu akan dihapus (diaktifkan) dan dikembalikan ke memori dengan objek httpsession.
contoh:
package me.gacl.domain;import java.io.Serializable;import javax.servlet.http.HttpSessionActivationListener;import javax.servlet.http.HttpSessionEvent;/*** @ClassName: JavaBeanDemo2* @Description: JavaBean object that implements the HttpSessionActivationListener interface can perceive Aktivasi peristiwa yang diaktifkan dan pasif: objek JavaBean dan sesi tersebut diakerialisasi (diaktifkan) ke dalam memori bersama. PASSIVIVE: Objek Javaban ada di sesi. Ketika server serialisasi sesi ke hard disk, jika objek Javabean dalam sesi mengimplementasikan antarmuka serializable, server akan membuat serialisasi objek Javabean dalam sesi ke hard disk bersama -sama. Pengoperasian objek Javabean dan sesi ke hard disk bersama -sama disebut pasif. Jika objek JavaBean dalam sesi tidak mengimplementasikan antarmuka serializable, server pertama -tama akan menghapus objek Javabean dalam sesi yang tidak mengimplementasikan antarmuka serializable dan kemudian serial (menyumbat) sesi ke hard disk. Ketika objek JavaBean terikat ke objek HTTPSESSESS akan dipasivasi dengan objek HTTPSESSION, server web memanggil kekosongan objek objek Javabean sebelum objek JavaBean terikat ke objek HTTPSESSESS dipasivasi dengan objek HTTPSESSESS. Metode sessionwillpastivate (httpsessionEvent) sehingga objek Javabean dapat mengetahui bahwa itu akan diserialisasi (pasif) dengan objek httpsession ke hard disk. Setelah objek Javabean yang terikat pada objek httpsession akan diaktifkan dengan objek httpsession, server web memanggil metode void sessionDidActive (httpsessionEvent) dari objek Javabean sehingga objek Javabean dapat diketahui bahwa itu akan dikerjakan: diaktifkan kembali) dengan objek httpsesi ke @(-Naktivasi) dengan httpsesi ke @a. 11:22:35 PM **/ Kelas Publik Javabeandemo2 mengimplementasikan httpsessionactivationListener, serializable {private static final long serialVersionuid = 7589841135210272124l; nama string pribadi; @Override public void sessionwillpassive (httpsessionEvent se) {system.out.println (name+"dan sesi diserialisasi (pasif) ke hard disk bersama -sama. ID sesi adalah:"+se.getSession (). Getid ()); } @Override public void sessionDidActivate (httpsessionEvent se) {System.out.println (name+"dan sesi deserialized (diaktifkan) dari hard disk bersama -sama. ID dari sesi ini adalah:"+se.getSession (). Getid ()); } public string getName () {return name; } public void setName (name string) {this.name = name; } public javabeandemo2 (name string) {this.name = name; }}Untuk mengamati proses objek Javabean yang terikat pada objek httpsession yang dipasivasi ke hard disk dan diaktifkan kembali dari hard disk ke memori, kita perlu menggunakan server Tomcat untuk membantu kita menyelesaikan proses pasif dan aktivasi objek httpsesi. Metode spesifiknya adalah sebagai berikut:
Buat file Context.xml di folder Webroot/Meta-INF sebagai berikut:
Isi file konteks.xml adalah sebagai berikut:
<context> <Manager className = "org.apache.catalina.session.persistentManager" maxidleswap = "1"> <Store className = "org.apache.catalina.Session.filestore" direktori = "gacl"/> </manager> </konteks> Konteks>
Setelah 1 menit konfigurasi dalam file context.xml, passir objek httpsession ke dalam folder GACL di hard disk lokal
Kode tes JSP adalah sebagai berikut:
<%@ page language = "java" pageEncoding = "UTF-8"%> <%@ page Impor = "me.gacl.domain.javabeandemo2"%> <! Doctype html> <html> <head> <itement> </title> </head> <body> Segera setelah Anda mengakses halaman JSP, ht. ID dari sesi yang dibuat adalah: $ {pagecontext.Session.id} <hr/> <% session.setAttribute ("bean", javabeandemo2 baru ("kesepian dan bangga")); %> </body> </html>Saat mengakses halaman JSP ini, server akan segera membuat objek HTTPSESSION, dan kemudian mengikat objek JavaBean yang mengimplementasikan antarmuka HTTPSessionActivationListener ke objek sesi. Setelah menunggu 1 menit, tidak ada yang akan mengakses halaman JSP ini lagi, dan server akan secara otomatis menyumbat (membuat serial) objek httpsession ke hard disk.
Kita dapat menemukan sesi serial ke penyimpanan lokal di Tomcat Server's Work/Catalina/LocalHost/Javaweb_Listener_20140908/GACL folder, seperti yang ditunjukkan pada gambar di bawah ini:
Saat mengakses halaman JSP ini lagi, server akan secara otomatis mengaktifkan kembali (deserialize) objek httpsession pada hard disk dan mengembalikannya ke memori. Hasil operasi adalah sebagai berikut:
Hanya ada begitu banyak konten dalam teknologi pendengar dalam teknologi pengembangan Javaweb. Dalam pekerjaan sehari -hari, teknologi pendengar lebih sering digunakan dalam pengembangan proyek Javaweb, jadi Anda harus menguasai teknologi ini.
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.