個人のWebプロジェクトでサーブレットリスナーを使用するには?

コンパイル ソフトウェア: IntelliJ IDEA 2019.2.4 x64
オペレーティング システム: win10 x64 ビット Home Edition
サーバー ソフトウェア: apache-tomcat-8.5.27



1. サーブレットリスナーとは?

公式用語では、「Java サーブレット仕様に基づくオブジェクトであり、主にWeb アプリケーションでのServletContext、HttpSession、HttpServletRequest などのドメイン オブジェクトの作成および破棄イベントを監視し、これらのプロパティの発生を監視するために使用されます。ドメイン オブジェクト。変更されたイベント」、非常に鋭い表現です。

しかし、これらの言葉は初心者のシャオバイにはあまり理解できないかもしれません。悪名高い米国のプリズム ドア ハッキング事件など特定のグループを盗聴し、ターゲットの特定の行動イベントに基づいて対応します


2. サーブレット リスナーの機能は何ですか?

2.1 リスニング ドメイン オブジェクトの作成と破棄

2.1.1 ServletContextListener インターフェース

効果:

ServletContext オブジェクト (グローバル コンテキスト オブジェクト) の作成と破棄を監視する

メソッド名 効果
contextInitialized(ServletContextEvent sce) ServletContext の作成時に呼び出される
contextDestroyed(ServletContextEvent sce) ServletContext が破棄されたときに呼び出されます

ノート:

ServletContext对象Web プロジェクトがロードされる (Tomcat サーバーがオンになる) ときに作成されますが、 Web プロジェクトがアンロードされる (Tomcat サーバーがオフになる) ときに破棄されます。

2.1.2 HttpSessionListener インターフェイス

効果:

HttpSession オブジェクト (セッション ドメイン オブジェクト) の作成と破棄を監視する

メソッド名 効果
sessionCreated(HttpSessionEvent hse) HttpSession オブジェクトの作成時に呼び出されます
sessionDestroyed(HttpSessionEvent hse) HttpSession オブジェクトが破棄されたときに呼び出されます

ノート:

HttpSession对象getSession メソッドが初めて呼び出されたときに作成されますがクライアントが閉じられるとオブジェクトが破棄され、強制的に無効化され、最大アイドル時間に達すると自動的に無効化されます。

2.1.3 ServletRequestListener インターフェイス

効果:

ServletRequest オブジェクト (リクエスト ドメイン オブジェクト) の作成と破棄を監視する

メソッド名 効果
requestInitialized(ServletRequestEvent sre) ServletRequest オブジェクトの作成時に呼び出されます
requestDestroyed(ServletRequestEvent sre) ServletRequest オブジェクトが破棄されたときに呼び出されます

ノート:

ServletRequest对象リクエストがあると作成されますがレスポンスが終了すると破棄されます。

2.2 監視ドメイン オブジェクトの共有データの追加、変更、および削除

2.2.1 ServletContextAttributeListener インターフェース

効果:

ServletContext オブジェクトの属性の追加、削除、変更を監視する

メソッド名 効果
attributeAdded(ServletContextAttributeEvent scab) 属性が ServletContext に追加されたときに呼び出されます
attributeRemoved(ServletContextAttributeEvent scab) 属性が ServletContext から削除されたときに呼び出されます
attributeReplaced(ServletContextAttributeEvent scab) ServletContext の属性が変更されたときに呼び出されます

ServletContextAttributeEvent オブジェクトは属性変更イベントを表し、次のメソッドが含まれています。

メソッド名 効果
getName() 変更または追加された属性名を取得する
getValue() 変更または追加された属性値を取得する
getServletContext() ServletContext オブジェクトを取得する

2.2.2 HttpSessionAttributeListener インターフェイス

効果:

HttpSession オブジェクトの属性の追加、削除、および変更を監視する

メソッド名 効果
attributeAdded(HttpSessionBindingEvent se) HttpSession に属性を追加するときに呼び出されます
attributeRemoved(HttpSessionBindingEvent se) 属性が HttpSession から削除されたときに呼び出されます
attributeReplaced(HttpSessionBindingEvent se) HttpSession の属性が変更されたときに呼び出されます

HttpSessionBindingEvent オブジェクトは属性変更イベントを表し、次のメソッドが含まれています。

メソッド名 効果
getName() 変更または追加された属性名を取得する
getValue() 変更または追加された属性値を取得する
getSession() イベントをトリガーした HttpSession オブジェクトを取得する

2.2.3 ServletRequestAttributeListener インターフェイス

効果:

ServletRequest オブジェクトの属性の追加、削除、変更を監視する

メソッド名 効果
attributeAdded(ServletRequestAttributeEvent srae) 属性が ServletRequest に追加されたときに呼び出されます
attributeRemoved(ServletRequestAttributeEvent srae) 属性が ServletRequest から削除されたときに呼び出されます
attributeReplaced(ServletRequestAttributeEvent srae) ServletRequest の属性が変更されたときに呼び出されます

ServletRequestAttributeEvent オブジェクトは属性変更イベントを表し、次のメソッドが含まれています。

メソッド名 効果
getName() 変更または追加された属性名を取得する
getValue() 変更または追加された属性値を取得する
getServletRequest () イベントをトリガーした ServletRequest オブジェクトを取得する

3. サーブレット リスナーを作成する方法は?

ステップ:

①クラスを作る

②インターフェースの実装

ビジネス シナリオのニーズに応じて、使用する 3 つの (ServletContextListener、HttpSessionListener、または ServletRequestListener) インターフェイスのいずれかを実装することを選択できます。

③インターフェースに抽象メソッドを実装する

④リスナーを登録する(最も原始的な方法)

位置:

web.xml に登録する

コード例は次のとおりです。

//注册刚创建的监听器MyListener
<listener>
    <listener-class>Listenner.MyListener</listener-class>
</listener>

4. 実践事例

ケース: リスナー MyListener クラスを作成し、ServletContextListener インターフェイスを継承して、グローバル コンテキスト オブジェクトの作成と破棄を監視し、リスナーを web.xml に登録します。プレゼンテーション リスナーは、グローバル コンテキスト オブジェクトの作成と破棄を監視します。

①MyListenerクラスを作成し、ServletContextListenerインターフェースを継承する

コード例は次のとおりです。

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

//监听ServletContext应用域对象
public class MyListener implements ServletContextListener {
    
    
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
    
    
        System.out.println("ServletContext对象创建后执行");
    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
    
    
        System.out.println("ServletContext对象销毁后执行");
    }
}

②web.xmlにリスナーを登録する

コード例は次のとおりです。

<listener>
    <listener-class>Listener.MyListener</listener-class>
</listener>

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/siaok/article/details/130352741
おすすめ