Rumah  >  Artikel  >  Java  >  Bagaimanakah Java Web Listener melaksanakan pemantauan dan pemprosesan acara?

Bagaimanakah Java Web Listener melaksanakan pemantauan dan pemprosesan acara?

WBOY
WBOYke hadapan
2023-05-19 12:01:491004semak imbas

Dalam pembangunan Web Java, Pendengar dan panggil balik antara muka adalah konsep yang sangat penting. Ia boleh digunakan untuk mendengar pelbagai acara untuk mengambil langkah yang sesuai apabila peristiwa itu berlaku.

Pendengar

Dalam aplikasi web Java, Pendengar ialah komponen yang boleh digunakan untuk mendengar peristiwa yang berlaku dalam aplikasi web. Pendengar boleh mendengar peristiwa berikut:

  • Penciptaan dan pemusnahan ServletContext

  • Penciptaan dan pemusnahan HttpSession

  • Penciptaan dan pemusnahan ServletRequest

Pendengar boleh mendengar acara yang sepadan dengan melaksanakan antara muka berikut:

  • ServletContextListener

  • HttpSessionListener

  • ServletRequestListener

Sebagai contoh, kod berikut menunjukkan cara mendengar penciptaan dan penciptaan ServletContext dengan melaksanakan antara muka ServletContextListener:

public class MyServletContextListener implements ServletContextListener {
    public void contextInitialized(ServletContextEvent event) {
        // ServletContext创建时执行的代码
    }
    public void contextDestroyed(ServletContextEvent event) {
        // ServletContext销毁时执行的代码
    }
}

Panggil balik antara muka

Fungsi panggil balik ialah corak pengaturcaraan yang membolehkan menghantar fungsi sebagai parameter kepada fungsi lain dan kemudian memanggil fungsi di dalam fungsi tersebut. untuk melaksanakan panggilan balik. Di Java, panggilan balik boleh dilaksanakan menggunakan antara muka.

Sebagai contoh, kod berikut menunjukkan cara menggunakan panggilan balik antara muka untuk melaksanakan pendengaran acara:

public interface MyEventListener {
    void onEvent(Event event);
}
public class EventSource {
    private MyEventListener listener;
    public void setEventListener(MyEventListener listener) {
        this.listener = listener;
    }
    public void fireEvent(Event event) {
        if (listener != null) {
            listener.onEvent(event);
        }
    }
}
public class MyEventListenerImpl implements MyEventListener {
    public void onEvent(Event event) {
        // 处理事件的代码
    }
}

Dalam kod di atas, kelas EventSource mewakili sumber acara, yang boleh menetapkan acara melalui pendengar kaedah setEventListener(). Antara muka MyEventListener mewakili pendengar acara, yang mempunyai kaedah onEvent(), yang dipanggil apabila peristiwa berlaku. Kelas MyEventListenerImpl melaksanakan antara muka MyEventListener, yang mengandungi pelaksanaan kaedah onEvent() untuk mengendalikan acara.

Pendengar Web

Sejenis pendengar khas yang digunakan untuk mendengar acara dalam aplikasi Web dipanggil pendengar Web. Pendengar web boleh mendengar acara berikut:

  • Penciptaan dan pemusnahan ServletContext

  • Penciptaan dan pemusnahan HttpSession

  • Penciptaan dan pemusnahan ServletRequest

  • Perubahan keadaan atribut dalam HttpSession

Sebagai contoh, kod berikut menunjukkan cara melaksanakan HttpteListensioner Antara muka untuk memantau perubahan dalam status atribut dalam HttpSession:

public class MyHttpSessionAttributeListener implements HttpSessionAttributeListener {
    public void attributeAdded(HttpSessionBindingEvent event) {
        // HttpSession中添加属性时执行的代码
    }
    public void attributeRemoved(HttpSessionBindingEvent event) {
        // HttpSession中删除属性时执行的代码
    }
    public void attributeReplaced(HttpSessionBindingEvent event) {
        // HttpSession中替换属性时执行的代码
    }
}

Pantau penciptaan dan pemusnahan tiga skop

Dalam aplikasi Web Java, terdapat tiga skop: ServletContext, HttpSession dan ServletRequest. Anda boleh mendengar peristiwa penciptaan dan pemusnahan skop ini dengan menulis pendengar yang sesuai.

Sebagai contoh, kod berikut menunjukkan cara mendengar peristiwa penciptaan dan pemusnahan ketiga-tiga skop ini dengan melaksanakan antara muka ServletContextListener, HttpSessionListener dan ServletRequestListener:

public class MyServletContextListener implements ServletContextListener {
    public void contextInitialized(ServletContextEvent event) {
        // ServletContext创建时执行的代码
    }
    public void contextDestroyed(ServletContextEvent event) {
        // ServletContext销毁时执行的代码
    }
}
public class MyHttpSessionListener implements HttpSessionListener {
    public void sessionCreated(HttpSessionEvent event) {
        // HttpSession创建时执行的代码
    }
    public void sessionDestroyed(HttpSessionEvent event) {
        // HttpSession销毁时执行的代码
    }
}
public class MyServletRequestListener implements ServletRequestListener {
    public void requestInitialized(ServletRequestEvent event) {
        // ServletRequest创建时执行的代码
    }
    public void requestDestroyed(ServletRequestEvent event) {
        // ServletRequest销毁时执行的代码
    }
}

Dengar status atribut tiga skop perubahan

Selain dapat memantau kejadian penciptaan dan pemusnahan tiga skop, anda juga boleh memantau perubahan dalam keadaan atributnya. Anda boleh mendengar acara ini dengan melaksanakan Pendengar yang sepadan.

Sebagai contoh, kod berikut menunjukkan cara memantau perubahan dalam status atribut dalam tiga skop ini dengan melaksanakan antara muka ServletContextAttributeListener, HttpSessionAttributeListener dan ServletRequestAttributeListener:

rreee

perubahan statusListen to the status nilai yang disimpan dalam HttpSession

Selain memantau peristiwa perubahan status atribut dalam HttpSession, anda juga boleh memantau peristiwa perubahan status nilai yang disimpan dalam HttpSession. Untuk mendengar acara ini, anda boleh melaksanakan antara muka HttpSessionBindingListener.

Sebagai contoh, kod berikut menunjukkan cara memantau peristiwa perubahan keadaan bagi nilai yang disimpan dalam HttpSession dengan melaksanakan antara muka HttpSessionBindingListener:

public class MyServletContextAttributeListener implements ServletContextAttributeListener {
    public void attributeAdded(ServletContextAttributeEvent event) {
        // ServletContext中添加属性时执行的代码
    }
    public void attributeRemoved(ServletContextAttributeEvent event) {
        // ServletContext中删除属性时执行的代码
    }
    public void attributeReplaced(ServletContextAttributeEvent event) {
        // ServletContext中替换属性时执行的代码
    }
}
public class MyHttpSessionAttributeListener implements HttpSessionAttributeListener {
    public void attributeAdded(HttpSessionBindingEvent event) {
        // HttpSession中添加属性时执行的代码
    }
    public void attributeRemoved(HttpSessionBindingEvent event) {
        // HttpSession中删除属性时执行的代码
    }
    public void attributeReplaced(HttpSessionBindingEvent event) {
        // HttpSession中替换属性时执行的代码
    }
}
public class MyServletRequestAttributeListener implements ServletRequestAttributeListener {
    public void attributeAdded(ServletRequestAttributeEvent event) {
        // ServletRequest中添加属性时执行的代码
    }
    public void attributeRemoved(ServletRequestAttributeEvent event) {
        // ServletRequest中删除属性时执行的代码
    }
    public void attributeReplaced(ServletRequestAttributeEvent event) {
        // ServletRequest中替换属性时执行的代码
    }
}

Senario aplikasi Listener

Aplikasi Listener senario Sangat meluas. Sebagai contoh, Listener boleh digunakan untuk melaksanakan fungsi berikut:

  • Muatkan fail konfigurasi apabila ServletContext dimulakan

  • Rekodkan maklumat bagi pengguna log masuk apabila HttpSession dibuat

  • Rekod alamat IP yang diminta apabila ServletRequest dibuat

  • Lakukan pembersihan yang sepadan apabila mencipta dan memusnahkan skop

Apabila menggunakan Listener, anda perlu memberi perhatian kepada perkara berikut:

  • Kelas pelaksanaan Listener mesti melaksanakan antara muka yang sepadan.

  • Kelas pelaksanaan pendengar mesti dikonfigurasikan dalam fail web.xml.

  • Kelas pelaksanaan Listener mesti berada dalam ClassLoader yang sama dengan aplikasi.

Atas ialah kandungan terperinci Bagaimanakah Java Web Listener melaksanakan pemantauan dan pemprosesan acara?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam