コンパイル ソフトウェア: 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>