Java のフィルター、リスナー、インターセプターの例の詳細な説明
1. フィルター
フィルターは、サーブレット技術の中で最も実用的な技術であり、Web サーバーによって管理されるすべての Web リソース (JSP、サーブレット、静的 HTML など) を管理します。ファイルなどが、いくつかの特別な機能を実現するためにインターセプトされます。たとえば、URL レベルの権限アクセス制御、機密語彙のフィルタリング、応答情報の圧縮などの高度な機能を実装できます。
これは主にユーザーリクエストの前処理に使用され、HttpServletResponse の後処理もできます。 Filter を使用する完全なプロセス: Filter はユーザー リクエストを前処理し、次にそのリクエストを処理のためにサーブレットに渡して応答を生成し、最後に Filter がサーバーの応答を後処理します。
一般的に次の場所で Spring アーキテクチャで使用されます:
1.1 文字書き込みデータベースのエンコーディングの問題に対処するには、Web でコードを設定し、初期化シーケンシャルロード問題を統合し、フィルターを使用してプロキシ関数を完了します


1 <filter> 2 <filter-name>Encoding</filter-name> 3 <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 4 <init-param> 5 <param-name>encoding</param-name> 6 <param-value>utf-8</param-value> 7 </init-param> 8 </filter> 9 <filter-mapping>10 <filter-name>Encoding</filter-name>11 <url-pattern>/*</url-pattern>12 </filter-mapping>
过滤器生命周期的四个阶段:
<span style="font-size: 14px">1、实例化:Web容器在部署Web应用程序时对所有过滤器进行实例化。Web容器回调它的无参构造方法。</span><br><span style="font-size: 14px">2、初始化:实例化完成之后,马上进行初始化工作。Web容器回调init()方法。</span>
3、过滤:请求路径匹配过滤器的URL映射时。Web容器回调doFilter()方法——主要的工作方法。
4、销毁: Web容器在卸载Web应用程序前,Web容器回调destroy()方法。
二、监听器
监听器Listener就是在application,session,request三个对象创建、销毁或者往其中添加修改删除属性时自动执行代码的功能组件。
Listener是Servlet的监听器,可以监听客户端的请求和服务端的操作等。
主要有以下三类:
1、ServletContext监听
ServletContextListener:用于对Servlet整个上下文进行监听(创建、销毁)。
ServletContextAttributeListener:对Servlet上下文属性的监听(增删改属性)。
2、Session监听
Session属于http协议下的内容,接口位于javax.servlet.http.*包下。
HttpSessionListener接口:对Session的整体状态的监听。
HttpSessionAttributeListener接口:对session的属性监听。
session的销毁有两种情况:
2.1 session超时,web.xml配置: <session-config> <session-timeout>120session-timeout>
session-config>
2.2 手工使session失效 public void invalidate();//使session失效方法。session.invalidate();
3、Request监听
ServletRequestListener:用于对Request请求进行监听(创建、销毁)。
ServletRequestAttributeListener:对Request属性的监听(增删改属性)。
4、在web.xml中配置
Listener配置信息必须在Filter和Servlet配置之前,Listener的初始化(ServletContentListener初始化)比Servlet和Filter都优先,
而销毁比Servlet和Filter都慢。
<listener> <listener-class>com.listener.classlistener-class> listener>
<context-param> <param-name>contextConfigLocationparam-name>
<param-value>classpath:spring/applicationContext-*.xmlparam-value>
context-param>
<リスナー>
<リスナークラス>org.springframework.web.context.ContextLoaderListenerリスナークラス>
リスナー> 4, 1 Spring は、IntrospectorCleanupListener を使用してキャッシュをクリーンアップします このリスナーの機能は、Web アプリケーションが閉じられたときに JDK の JavaBeans の Introspector キャッシュを更新して、Web アプリケーションのクラスローダーとそのクラスが確実に更新されるようにすることです。負荷は正しくリソースから解放されます。 JavaBeans Introspector を使用してアプリケーション クラスを分析した場合、システム全体の Introspector キャッシュにこれらのクラスへのハード参照が保持されます。したがって、これらのクラスと Web アプリケーションのクラス ローダーは、Web アプリケーションが閉じられたときにガベージ コレクターによって再利用されません。 IntrospectorCleanupListener は、ガベージ コレクターによってリサイクルできるように、これを適切にクリーンアップします。 Introspector をクリーンアップする唯一の方法は、Introspector キャッシュ全体をフラッシュすることです。アプリケーションがどのクラスを参照しているかを正確に指定する他の方法はありません。これにより、キャッシュされた Introspector の結果がサーバー上の他のすべてのアプリケーションから削除されます。 Spring の内部 Bean メカニズムを使用する場合、このリスナーを使用する必要はありません。Spring 自体のイントロスペクション結果キャッシュは、分析された JavaBeans Introspector キャッシュをすぐに更新し、アプリケーション自身の ClassLoader キャッシュに 1 つだけ保持するためです。 Spring 自体はリークを生成しませんが、Spring フレームワーク クラス自体が「共通」クラス ローダー (システムの ClassLoader など) に存在する場合でも、IntrospectorCleanupListener を使用する必要があることに注意してください。この場合、この IntrospectorCleanupListener は Spring のイントロスペクション キャッシュを適切にクリーンアップします。
アプリケーション クラスが JavaBeans Introspector を直接使用する必要があることはほとんどないため、通常、メモリ リークの原因となるのは Introspector リソースではありません。対照的に、Struts や Quartz などの多くのライブラリやフレームワークは、Introspector をクリーンアップしません。
単純な Introspector リークによって、Web アプリケーション全体のクラス ローダーがリサイクルされなくなることに注意してください。この結果、Web アプリケーションが閉じられるとき、アプリケーションのすべての静的クラス リソース (単一インスタンス オブジェクトなど) は解放されません。メモリ リークの根本原因は、実際にはこれらのリサイクルされていないクラスではありません。
注: IntrospectorCleanupListener は、Web アプリケーションのライフサイクルの適切なタイミングで確実に有効になるように、他のリスナー (Spring の ContextLoaderListener の前など) よりも前に、web.xml の最初のリスナーとして登録する必要があります。
<
listener>
<listener-class>org.springframework.web. .IntrospectorCleanupListener リスナークラス>
listener> スリー、スプリングインターセプター
スプリングマネージドインターセプターはを継承する必要があります
InterアクセプタはHandlerInterceptorを実装します インターセプターに入るには、まず設定する必要があります春の入り口
spring-servlet.xml 設定では、ヘッダー ファイルの追加に注意してください
< ;mvc:アノテーション駆動型/>
以上がJava のフィルター、リスナー、インターセプターの例の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Java の乱数ジェネレーターのガイド。ここでは、Java の関数について例を挙げて説明し、2 つの異なるジェネレーターについて例を挙げて説明します。

Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

Java での日付までのタイムスタンプに関するガイド。ここでは、Java でタイムスタンプを日付に変換する方法とその概要について、例とともに説明します。

カプセルは3次元の幾何学的図形で、両端にシリンダーと半球で構成されています。カプセルの体積は、シリンダーの体積と両端に半球の体積を追加することで計算できます。このチュートリアルでは、さまざまな方法を使用して、Javaの特定のカプセルの体積を計算する方法について説明します。 カプセルボリュームフォーミュラ カプセルボリュームの式は次のとおりです。 カプセル体積=円筒形の体積2つの半球体積 で、 R:半球の半径。 H:シリンダーの高さ(半球を除く)。 例1 入力 RADIUS = 5ユニット 高さ= 10単位 出力 ボリューム= 1570.8立方ユニット 説明する 式を使用してボリュームを計算します。 ボリューム=π×R2×H(4
