SpringMVCのインターセプターインターセプターも非常に重要で有用です。その主な機能は、ユーザー要求をインターセプトし、対応する処理を実行することです。たとえば、許可確認を実行するか、ユーザーがログインしているかどうかを判断するか、現在の時間が12306のようなチケット購入時間であるかどうかを判断できます。
1.インターセプター実装クラスを定義します
SpringMVCのインターセプターインターセプトリクエストは、HandlerInterceptorを介して実装されます。 SpringMVCでインターセプターを定義するのは非常に簡単です。主な方法は2つあります。最初の方法は、Spring HandlerInterceptorインターフェイスを実装するインターセプタークラスを定義することです。または、このクラスは、Springが提供した抽象クラスなど、ハンドラーインターセプターインターフェイスを実装している抽象クラスなど、ハンドラーインターセプターインターフェイスを実装するクラスを継承します。 2番目の方法は、Spring WebRequestInterceptorインターフェイスを実装するか、WebRequestInterceptorインターフェイスを実装するクラスを継承することです。
(i)HandlerInterceptorインターフェイスの実装
HandlerInterceptorインターフェイスには3つの方法が定義されており、これらの3つの方法を使用してユーザー要求を傍受します。
(1)PREANDLE(httpservletrequestリクエスト、httpservletresponse応答、オブジェクトハンドル)メソッドは、要求が処理される前に呼び出されます。 SpringMVCのインターセプターは、チェーン形式で呼び出されます。複数のインターセプターは、アプリケーションまたはリクエストに同時に存在できます。各インターセプターコールは、宣言命令に応じて順番に実行され、最初のコールはインターセプターの事前ハンドルメソッドであるため、この方法でいくつかの前向き化操作を実行できます。
この方法の返品値は、ブール型ブール波です。 falseに戻ると、リクエストが終了し、その後のインターセプターとコントローラーが再び実行されないことを意味します。戻り値が真の場合、次のインターセプターの事前ハンドル方法は引き続き呼び出されます。すでに最後のインターセプターである場合、現在の要求のコントローラー方法が呼び出されます。
(2)posthandle(httpservletrequestリクエスト、httpservletResponse応答、オブジェクトハンドル、ModelandView ModelandView)メソッド。 PreHandleメソッドの説明から、後で述べる後の補償法を含むこの方法は、現在のインターセプターのプリハンドル方法の返品値が真である場合にのみ呼び出すことができることを知っています。
名前が示唆するように、POSTHANDLEメソッドは、現在のリクエストが処理された後、つまりコントローラーメソッドが呼び出された後に実行されますが、DispatcherServletが表示されてビューをレンダリングする前に呼び出されます。ポスタンドルメソッドの呼び出しの方向は、PreHandleの反対です。つまり、最初に宣言されたインターセプターのポスタンドル方法は後で実行されます。 struts2のインターセプターの実行プロセスもチェーンされていますが、struts2では、[アクション]の呼び出しを手動で呼び出して、次のインターセプターまたはアクションへの呼び出しをトリガーする必要があります。次に、Invokeメソッドが宣言された順序で実行される前の各インターセプターのコンテンツと、Invokeメソッド後のコンテンツが逆転します。
(3)Aftercompletion(httpservletrequestリクエスト、httpservletresponse応答、オブジェクトハンドル、例外ex)メソッド。名前が示すように、この方法は、要求全体が完了した後、つまり、DispatcherServletが対応するビューをレンダリングした後に実行されます。この方法の主な機能は、リソースをクリーンアップすることです。
簡単なコードの説明は次のとおりです。
javax.servlet.http.httpservletrequestをインポートします。 javax.servlet.http.httpservletResponseをインポートします。 Import org.springframework.web.servlet.handlerInterceptor; Import org.springframework.web.servlet.modelandview; Public Class SpringMVCInterceptorは、HandlerInterceptor { /*** PreHandleメソッドをプロセッサインターセプトに使用します。名前が示すように、この方法はコントローラープロセスの前に呼び出されます。 SpringMVCのインターセプターインターセプターが鎖でつながれ、複数のインターセプターが同時に存在する可能性があります。次に、SpringMVCは宣言の順序に従って1つずつ実行し、コントローラーメソッドが呼び出される前に、インターセプター内のすべてのハンドルメソッドが呼び出されます。 SpringMVCのインターセプターチェーン構造も中断することができます。この割り込み方法により、PreHandleの返品値はFalseになります。 Prehandleの返品値がfalseの場合、要求全体が終了します。 */ @Override public boolean prehandle(httpservletrequest request、httpservletresponse応答、オブジェクトハンドラー)例外{// todo auto-fenerated methood stub returt false; } /***このメソッドは、インターセプターのプリハンドルメソッドの現在の返品値が真である場合にのみ実行されます。 POSTHANDLEは、プロセッサの傍受に使用されます。その実行時間は、プロセッサが処理された後*、つまりコントローラーメソッドが呼び出された後ですが、DispatcherServletがビューをレンダリングする前に実行されます。つまり、この方法ではModelandView*を操作できます。この方法のチェーン構造は、通常のアクセス方向の反対です。つまり、最初に宣言された方法は後で呼び出されます。これは、Struts2のインターセプターの実行プロセスに少し似ています。 * Struts2のインターセプトメソッドでのみ、Invoke ActionInvocationの方法を手動で呼び出す必要があります。 Struts2のInvoke ActionInvocationは、次のインターセプター *を呼び出すか、アクションを呼び出し、インターセプターを呼び出す前に呼び出す必要があるコンテンツを呼び出す前に呼び出す必要があります。 * / @Override public void posthandle(httpservletrequest request、httpservletResponse応答、オブジェクトハンドラー、モデルアンドビューmodelandview)例外{// Todo auto-generated method stub} / ***この方法は、要求全体が完了した後に実行されます。つまり、DispatcherServletがビューの実行をレンダリングします。 *この方法の主な機能は、リソースをクリーンアップすることです。もちろん、この方法は、インターセプターのプリハンドル法の現在の返品値が真である場合にのみ実行できます。 */ @Override public void aftercompletion(httpservletrequest request、httpservletResponse応答、オブジェクトハンドラー、例外Ex)スロー例外{// todo auto-fenated methood stub}}} (ii)WebRequestInterceptorインターフェイスを実装します
WebRequestInterceptorで定義されている3つの方法もあり、これら3つの方法を使用して傍受を実装しています。 3つのメソッドはすべて同じパラメーターWebRequestを渡します。このWebRequestとは何ですか?このWebRequestは、Springで定義されたインターフェイスです。その中のメソッド定義は、基本的にhttpservletrequestと同じです。 WebRequestEnterceptorのWebRequestInterceptorで実行されるすべての操作は、httpservletrequestに同期され、現在のリクエストに渡されます。
(1)PreHandle(WebRequestリクエスト)メソッド。このメソッドは、リクエストが処理される前に呼び出されます。つまり、コントローラーメソッドが呼び出される前に呼び出されます。この方法は、ハンドラーインターセプターのプリハンドルとは異なります。主な違いは、メソッドの返品値が無効であることです。つまり、返品値がないことを意味します。したがって、通常、リソースを準備するために使用します。たとえば、Hibernateを使用する場合、この方法でHibernateセッションオブジェクトを準備し、WebRequestのSetAttribute(名前、値、スコープ)を使用してWebRequestプロパティに入れることができます。ここでは、整数タイプのSetAttributeメソッドの3番目のパラメータースコープについて説明できます。 WebRequestの親レイヤーインターフェイスrequestAttributesに対して3つの定数が定義されています。
scope_request:その値は0です。つまり、リクエストでのみアクセスできます。
scope_session:その値は1です。環境が許可する場合、それはローカル分離セッションを表します。そうしないと、通常のセッションを表し、セッションの範囲内でアクセスできます。
scope_global_session:その値は2です。環境が許可する場合、グローバルに共有されたセッションを表します。そうしないと、通常のセッションを表し、セッションの範囲内でアクセスできます。
(2)posthandle(WebRequestリクエスト、モデルマップモデル)メソッド。このメソッドは、要求処理の後、つまりコントローラーメソッドが呼び出された後に呼び出されますが、ビューリターンがレンダリングされる前に呼び出されるため、このメソッドのデータモデルマップを変更することでデータの表示を変更できます。この方法には2つのパラメーターがあります。 WebRequestオブジェクトは、要求データ全体を渡すために使用されます。たとえば、PreHandleで作成されたデータは、WebRequestを介して渡されてアクセスできます。 ModelMapは、コントローラープロセスの後に返されるモデルオブジェクトです。返されたモデルモデルを変更することにより、変更されたモデルを変更できます。
(3)Aftercompletion(WebRequest Request、Exception Ex)メソッド。この方法は、リクエスト全体が処理された後、つまりビューが返されてレンダリングされた後に実行されます。したがって、この方法では、リソースリリース操作を実行できます。 WebRequestパラメーターは、ここで準備したリソースをリリースのために渡すことができます。例外パラメーターは、現在要求されている例外オブジェクトを表します。コントローラーにスローされた例外がSpring例外プロセッサによって処理されている場合、例外オブジェクトはnullです。
簡単なコードの説明は次のとおりです。
Import org.springframework.ui.modelmap; Intort org.springframework.web.context.request.webrequest; Import org.springframework.web.context.request.webRequestInterceptor;パブリッククラスAllInterceptorは、リクエストが処理される前にWebRequestInterceptor { /***実行します。この方法は主にリソースデータを準備するために使用され、その後、リクエスト属性としてWebRequestに配置できます*/ @Override public void prehandle(webrequest request)throws exception {// todo auto-enerated method stab.out.println( "allInterceptor .........................."); request.setAttribute( "request"、 "request"、webrequest.scope_request); //これはリクエストの範囲内に配置されるため、リクエストのみを取得できます。環境が許可されている場合、局所的に分離されたセッションでのみアクセスできます。それ以外の場合は、通常の現在のセッションでアクセスできます。 request.setAttribute( "globalsession"、 "globalsession"、webrequest.scope_global_session); //環境でグローバルに共有されたセッションでアクセスできます。そうしないと、通常の現在のセッションでアクセスできます。モデルマップは、コントローラーがコントローラーの処理を要求した後に返されるモデルオブジェクトを表します。そのため、この方法でモデルマップのプロパティを変更して、返されたモデルを変更する効果を実現できます。 */ @Override public void posthandle(webrequest request、modelmap map)スロー例外{// todo auto-for(string key:map.keyset())system.out.println(key + "--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- aftercompletion(webrequest request、exception ixception)をスローする例外{// todo auto-enerated method stub.out.println(例外 + + " - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = ") }}2。springmvcのインターセプトシステムに定義されたインターセプタークラスを追加します
1.SpringMVC構成ファイルでMVCをサポートするスキーマを追加します
XMLNS:MVC = "http://www.springframework.org/schema/mvc" xsi:schemalocation = "http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd "
これが私の声明の例です。
<beans xmlns = "http://www.springframework.org/schema/beans" xmlns:xsi = "http://www.w3.org/2001/xmlschema-instance" " xmlns:Context = "http://www.springframework.org/schema/context" xmlns:mvc = "http://www.springframework.org/schema/mvc" xsi:schemalocation = " http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context-/spring-context-/spring http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd ">
このようにして、SpringMVC構成ファイルでMVCタグを使用できます。 MVC:SpringMVCのインターセプターを宣言するために使用されるMVC:インターセプターがあります。
(ii)MVC:インターセプタータグを使用して、SpringMVCインターセプターチェーンに追加する必要があるインターセプターを宣言する
<MVC:インターセプター> <! - beanを使用してインターセプターを定義します。 MVCのルートで直接定義されたインターセプター:インターセプターはすべてのリクエストをインターセプトします - > <bean/> <mvc:interceptor> <mvc:mapping path = "/test/number.do"/> <! - MVC:インターセプターインターセプターは特定のリクエストをインターセプトします - >
上記の例から、一連のインターセプターをMVC:インターセプタータグを使用して宣言し、インターセプターチェーンを形成できることがわかります。インターセプターの実行命令は、宣言の順序で実行されます。宣言されたインターセプターのプリハンドルメソッドが最初に実行されますが、その後期法と後分割メソッドは後で実行されます。
MVCの下でインターセプターを宣言する主な方法は2つあります。インターセプタータグ:
(1)インターセプター実装クラスのBeanオブジェクトを直接定義します。このように宣言された迎撃器インターセプターは、すべての要求を傍受します。
(2)MVC:インターセプタータグを使用して宣言します。このように宣言されたインターセプターは、MVC:マッピングサブタグを介して傍受する必要がある要求パスを定義できます。
上記の2つのステップの後、定義されたインターセプターは特定のリクエストを傍受するように動作します。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。