序文
インターセプターシステムは、Struts2フレームワークの重要な部分です。インターセプターシステムがなければ、そのような使いやすいStruts2フレームワークはないと言うのは誇張ではありません。 Struts2フレームワークでは、多数のインターセプターが多くの基本機能を完了しています。たとえば、PARAMSインターセプターは、HTTP要求のパラメーターを解析し、アクションのプロパティを設定する責任があります。 Servlet-Configインターセプターは、httpservletrequestインスタンスとhttpservletresponseインスタンスをhttp要求に直接通過します。 Fileuploadインターセプターは、リクエストパラメーターのファイルドメインを解析し、アクションの3つのプロパティにファイルドメインを設定する責任があります。これはすべて、組み込みインターセプターによって行われます。したがって、struts2でインターセプターを使用する原則と方法を習得すると、struts2フレームワークの「ライフライン」を把握できます。
ただし、これまで、web.xmlでstrutsprepareandexecutefilterフィルターを構成することは別として、他のインターセプターにまだ連絡していません。では、なぜアプリケーションはうまく実行できるのでしょうか?実際、Struts2はデフォルトで多数の共通インターセプターを有効にしています。これらのインターセプターは、アクション用に構成されたパッケージがStruts-Defaultパッケージを継承する限り機能します。 Struts2の組み込みインターセプターを見てみましょう。
struts2内蔵インターセプター
Struts2フレームワークには、多くの組み込みインターセプターがあります。これらのインターセプターは、解析リクエストパラメーター、アクション属性への要求パラメーターの割り当てなど、Struts2フレームワークの作業の70%をほぼ完了します。Struts2の巧妙な設計は、主にインターセプターの設計によるものです。 struts2関数を拡張する必要がある場合は、対応するインターセプターを提供し、struts2コンテナで構成するだけです。
これらの内蔵インターセプターは、名前クラスペアの形式でstruts-default.xmlファイルで構成されています。ここでは、名前はインターセプターの名前です。これは、後で使用するインターセプターの一意の識別子です。クラスインターセプターの実装クラスを指定します。これらの組み込みインターセプターの詳細な説明については、公式ドキュメントを参照してください。
インターセプターを構成します
struts.xmlファイルでインターセプターを定義するには、インターセプタークラスのインターセプター名を指定する必要があり、インターセプター定義が完了します。 <インターセプター.../>を使用してインターセプターを定義します。
<! - インターセプター名とインターセプター実装クラスを指定してインターセプターを定義します - > <インターセプター名= "インターセプター名"> <param name = "param name"> param値</param> </interceptor>
さらに、複数のインターセプターを接続してインターセプタースタックを形成でき、<インターセプターREF .../>はインターセプターで使用されて、インターセプター参照を定義します。例えば:
<インターセプタースタック名= "インターセプタースタック1"> <interceptor-ref name = "interceptor one"/> <interceptor-ref name = "interceptor 2"/> ... </interceptor-stack> </interceptor-stack>
プログラム構造の観点から見ると、インターセプタースタックは複数のインターセプターで構成されています。ただし、プログラム関数の観点から見ると、インターセプタースタックとインターセプターは同じであり、アクション実行メソッドの実行前にそれらに含まれるメソッドは自動的に実行されます。したがって、インターセプタースタックをより大きなインターセプターとして完全に扱うことができます。
インターセプタースタックとインターセプターが一貫しているため、インターセプタースタックにはインターセプタースタックも含めることができます。たとえば、:
<インターセプタースタック名= "インターセプタースタック2"> <interceptor-ref name = "modeldiven"/> <interceptor-ref name = "interceptor stack 1"/> </interceptor-stack>
インターセプターを使用します
インターセプタースタックとインターセプターが定義されると、このインターセプタースタックまたはインターセプターを使用してアクションをインターセプトできます。インターセプターの傍受行動は、アクションが実行される前に実行されます。
<インターセプター-Ref .../>要素を使用することにより、インターセプタースタックを構成するときにインターセプターを参照する構文とまったく同じです。例えば:
<アクションname = "login"> <result name = "error">/error.jsp </result> <result name = "success.jsp </result.jsp </result.jsp </result-ref name =" defaultStack "/> <! - interceptor-ref name =" test1 "/> <> <> <interpectorの<> name = "key">動的パラメーター</param> </interceptor-ref> </action>
この構成が完了すると、ダウンロードが実行される前にこれらの3つのインターセプターが機能します。
デフォルトインターセプターを構成します
パッケージを構成するときは、デフォルトのインターセプターで指定できます。パッケージにデフォルトインターセプターが指定されると、そのパッケージのアクションがインターセプターを明示的に指定しない場合、デフォルトのインターセプターが機能します。ただし、パッケージ内のアクションにインターセプターを明示的に適用すると、デフォルトのインターセプターは機能しません。アクションでデフォルトのインターセプターを使用する必要がある場合は、インターセプターへの参照を手動で構成する必要があります。
アクションが配置されているパッケージのデフォルトインターセプターは、アクションに明示的に適用されない場合にのみ有効になります。
デフォルトインターセプターを構成して、<default-interceptor-ref .../>要素を使用します。これは、<パッケージ.../>要素の子として使用され、このパッケージのすべてのアクションのデフォルトインターセプターを構成します。例えば:
<default-interceptor-ref name = "デフォルトインターセプター"/>
たとえば、デフォルトインターセプターのパラメーターを指定することもできます。
<default-interceptor-ref name = "default interceptor"> <param name = "parameter name"> parameter値</param> </default-interceptor-ref>
struts-default.xmlファイルでは、struts-defaultという名前の抽象パッケージが設定されており、DefaultStackという名前のデフォルトのインターセプター参照が定義されています。パッケージを定義すると、Struts-Defaultパッケージを継承すると、デフォルトインターセプタースタック:DefaultStackも継承します。これは、インターセプターをアクション用に明示的に適用しない場合、DefaultStack Interceptorスタックが自動的に有効になります。
カスタムインターセプター
1>。クラスを追加してAbstractInterceptorクラスを継承するか、インターセプターインターフェイスを実装します
public class time interceptorはabstractInterceptorを拡張します{/***インターセプトのコアメソッドの戻り値は、文字列です*/@overridepublic string intercept(actioninvocation vocution)をスローする{// todo auto-funeated method "login";}}}2>。 struts.xmlパッケージにインターセプターの子ノードを追加し、その下にインターセプターノードを追加します
<パッケージname = "goods" namespace = "/goods" extends = "common-pkg"> <インターセプター> <インターセプター名= "TimeInterceptor"> </interceptor> </interceptors> </package>
3>。
<action name = "list_category" method = "list"> <interceptor-ref name = "timeinterceptor"> </interceptor-ref> <result name = "list" type = "dispatcher">/pages/category/list.jsp </result> </action>
要約します
この記事では、Stuts2 -The Interceptorのコアの予備的な要約を提供します。後続の記事では、独自のインターセプターを実装し、この記事にまとめた知識ポイントを適用します。
さて、上記はこの記事のコンテンツ全体です。この記事の内容には、すべての人の研究や仕事に特定の参照値があることを願っています。ご質問がある場合は、メッセージを残してコミュニケーションをとることができます。 wulin.comへのご支援ありがとうございます。