ホームページ  >  記事  >  Java  >  Java のフィルター、リスナー、インターセプターの例の詳細な説明

Java のフィルター、リスナー、インターセプターの例の詳細な説明

零下一度
零下一度オリジナル
2017-06-25 13:32:382473ブラウズ

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-class>org.springframework.web.servlet.DispatcherServしましょう -pattern>/ 上記の書き方では、末尾の URL は除外されません。 .jsp を処理する必要がある場合は、フィルターを使用するか、hiro アーキテクチャーを使用する必要があります ただし、一般的な静的リソースをフィルターしてインターセプトする必要はありません。次の構成を使用できますweb.xml 構成。 <サーブレットマッピング> <サーブレット名>default

パターン>*.css

*.js /image/*


spring-servlet.xml 設定では、ヘッダー ファイルの追加に注意してください

< ;mvc:アノテーション駆動型/>

以上がJava のフィルター、リスナー、インターセプターの例の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。