この記事では、SpringMVCの転送リダイレクトとインターセプターの例を紹介します。次のように、それはあなたと共有されます:
変数パラメーターメソッドを設計するとき、数据类型...パラメータータイプを宣言しますpublic static void function(int... numbers)
メソッド本体を実装するとき、可変パラメーターは配列として処理されます
public class test {public static void main(string [] args){system.out.println(test.sum(1,2,3)); System.out.println(test.sum(1,2,3,4,54)); } public static int sum(int ... numbers){int sum = 0; for(int i = 0; i <numbers.length; i ++){sum+= numbers [i]; } return sum; }}注:各メソッドでは、せいぜい1つの変数パラメーターのみが許可され、変数パラメーターがある場合は最後のパラメーターでなければなりません。
転送とリダイレクト
コントローラー内のリクエストを処理する方法では、文字列を返すデフォルトの方法は転送です。転送された値は、return "login"などのビューコンポーネントの名前であり、基本的にビューリゾルバー(ViewResolver)に基づいて最終的に表示されるページを取得します。リターンリダイレクトの構文:パスはリダイレクトを表します。リダイレクトの右側のコンテンツ:パスです。このパスは通常、相対パスを使用し、現在のクライアントのアドレスバーのパスに基づいて参照されます。たとえば、現在のアドレスはhttp:// localhost:8080/project/user/reg.doで、「リダイレクト:login.do」を返し、http:// localhost:8080/project/user/login.doにリダイレクトします。 http:// localhost:8080/project/main/index.doへ
フォワード:
デフォルトの方法ですが、return "forward:login"を使用することもできます。
返されたビューはビューでなければなりません。ビューは、ビューパーサーを通過した後に指定されたビューに転送されます。
リダイレクト:
リダイレクト:「リダイレクト:login.do」を返します
ビューではなく、コントローラーメソッドへのパスを返します。これはビューパーサーを通過するのではなく、直接ジャンプします。
例
@RequestMapping(value = "/handle_reg.do"、method = requestmethod.post)public string handlereg(user user、modelmap map){try {userservice.reg(user); system.out.println( "登録されています!"); "redirect:login.do"を返します。 // login.doの制御方法にリダイレクト、login.doはlogin.jsp} catch(usernameconflictexception e){system.out.println(e.getmessage()); map.put( "errormessage"、e.getmessage()); 「エラー」を返します。 }} @requestMapping(value = "login.do")public string handlelogin(){return "login"; }インターセプター
基本概念
インターセプターを使用します
カスタムインターセプタークラス
インターセプトクラス(demointerceptor)を作成して、ハンドラーインターセプターインターフェイスを実装します
パブリッククラスのdemointerceptorimplements handlerInterceptor { /***プロセッサが実行される前に呼び出されます* @param request httpservletrequestオブジェクトはリクエストパラメーターなどを取得できます。 trueが返された場合、後続のインターセプターとプロセッサが実行されます */ public boolean prehandle(httpservletrequest request、httpservletResponse応答、オブジェクトハンドラー)は例外{system.out.println( "デモインターセプターのプレハンダー実行"); trueを返します。 } / ***プロセッサが実行された後に呼び出され、指定されたビューにジャンプする前に電話* @paramリクエストhttpservletrequestオブジェクト* @param応答httpservletresponseオブジェクト* @paramハンドラーインターセプターコントローラーオブジェクト* @param modelandviewオブジェクト* /パブリックボイズのvied bied POSTHANDLE(HTTPSERVLETREQUESTリクエスト、httpservletResponse応答、オブジェクトハンドラー、ModelandView ModelandView)をスローする{ /*** 1。たとえば、独自のロジックを設計することができます。 System.out.println( "ハンドラー:"+ハンドラー); system.out.println( "demointerceptorのポスタンドラー実行"); //ビュー名を設定してから、実行が完了すると、index.jspページにジャンプします// modelandview.setviewname( "index"); } /** * call *要求処理が完了した後、public void aftercompletion(httpservletrequest request、httpservletResponse応答、オブジェクトハンドラー、例外Ex)をスロー{system.out.println( "demointerceptorのafcompletedecution"); }}SpringMVC構成ファイルで構成します
構成
上記の順序で構成する必要があります。そうしないと、エラーが報告されます
<! - 複数のインターセプターを構成できるインターセプターを構成します - > <MVC:インターセプター> <MVC:インターセプター> <! - インターセプターパスを設定し、すべてのプロセッサメソッドマッピングをインターセプト/ユーザー:http:// localhost:8080/springmvc/usersectepted-> <MVC:MappingPath = "/user/*"/> <! - インターセプターによって傍受されないコントローラーメソッドを構成します。これは、http:// localhost:8080/springmvc/user/index.doなどのオプションの構成です。 <MVC:exclude-mappingpath = "/user/login.do"/> <! - インターセプターの豆を構成し、完全なクラス名を指定します - > <beanclass = "cn.tedu.spring.interceptor.demointerceptor"> </bean> </mvc:インターセプター> </MVC:インターセプター>
実装方法
Public Boolean Prehandle(httpservletrequestリクエスト、httpservletresponse応答、オブジェクトハンドラー)
public void posthandle(httpservletrequest request、httpservletresponse応答、オブジェクトハンドラー、ModelandView ModelandView)
public void aftercompletion(httpservletrequest request、httpservletresponse応答、オブジェクトハンドラー、例外Ex)
デモログインチェック
カスタムインターセプター(loginInterceptor)
特定のプロセスは、事前ハンドラー法で非常に明確に記述されています
パブリッククラスのlogininterceptorimplements handlerinterceptor { / * *プロセッサが実行される前に呼び出されます(非javadoc) *1。Session * 2を取得します。セッションのUID値を読み取ります * nullの場合、ログインがないことを意味し、ログインインターフェイスに直接リダイレクトし、同時にfalseを返します。後続のプロセス*を実行する必要はありません* nullでなければ、ログインしてから直接trueを返し、後続のインターセプターまたはプロセッサ*/ public boolean prehandle(httpservletrequestリクエスト、httpservletresponse応答、オブジェクトハンドラー)をスローする必要はありません。 //セッションオブジェクトuid = session.getAttribute( "uid"); //セッションでオブジェクトを読み取る// uidが存在する場合、ログインしてif(uid!= null){return true; // trueを返す、ログインが成功した場合、後続のプロセスを実行する必要があります} response.sendredirect(request.getContextPath()+"/user/login.do"); //ログインインターフェイスにリダイレクトしてfalseを返します。 // falseを返すと、後続のプロセスを実行する必要はなく、直接中断されます} public void posthandle(httpservletrequestリクエスト、httpservletresponse応答、オブジェクトハンドラー、モデルアンドビューモデルアンドビュー)スロー例外}}SpringMVCでインターセプターを構成します
ここにはユーザーセンターにジャンプしてログインを確認する必要があるため、user_center.doと一致するだけです
<! - 複数のインターセプターを構成できるインターセプターを構成 - > <MVC:インターセプター> <MVC:インターセプター> <MVC:MappingPath = "/user/user_center.do"/> <beanclass = "
複数のインターセプターの実行順序
SpringMVC構成ファイルで構成された注文、つまり<MVC:Interceptors>で構成されたインターセプターの順序に従って実行。同じパスでインターセプターが実行される場合、最初の構成された最初のインターセプター
インターセプターとフィルターの違い(主な違い)
要約します
複数のリクエストが同じまたは非常に類似したタスクを必要とする場合、インターセプターを使用できます。
インターセプターを適切に開発し、SpringMVCの構成ファイルで構成する必要があります
<MVC:インターセプター>では、いくつかの<MVC:インターセプター>が構成されている場合、複数のインターセプターがインターセプターチェーンを形成します。複数のインターセプターが構成されている場合、それらは同じパスをインターセプトし、構成されたノードの順に実行されます。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。