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的监听器,可以监听客户端的请求和服务端的操作等。
主要有以下三类:
Session属于http协议下的内容,接口位于javax.servlet.http.*包下。
2.1 session超时,web.xml配置: <session-config> <session-timeout>120session-timeout>
session-config>
2.2 手工使session失效 public void invalidate();//使session失效方法。session.invalidate();
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 のイントロスペクション キャッシュを適切にクリーンアップします。
単純な 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 サイトの他の関連記事を参照してください。