単純なジャンプトピック
私は個人的に建設プロセスをもう一度練習することをお勧めします。面倒な場合は、以前のプロジェクトを直接コピーできますが、pom.xmlで少し情報を変更する必要があります。
<GroupId> com.hanpang.springmvc </groupid> <artifactid> springmvc-demo01 </artifactid> <バージョン> 0.0.1-snapshot </version>
1。コア構成クラスとロードクラス
パッケージcom.hanpang.config; Import org.springframework.context.annotation.componentscan; Import org.springframework.context.annotation.configuration; import org.springframework.web.servlet.config.annotation.enablewebmvc;@configuration@enablewebmvc@componentscan(basepackages = "com.hanpang。**。web")public class webconfig {}}パッケージcom.hanpang.config; Import org.springframework.web.servlet.support.abstractannotationconfigdispatchersersertinitializer; publicannotationconfigdispatcherservletinitializer {@Overrideプロテット<?> {webconfig.class}; } @Override Protected Class <? } @Override Protected String [] getServletMappings(){return new String [] {"/"}; }}2.Javawebステージジャンプ方法
SpringMVCメソッドの正式なパラメーターに注意してください。フレームワークは、当社のインスタンス操作を完了します。
パッケージcom.hanpang.web; import java.io.ioexception; import javax.servlet.servletexception; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; Import org.springframework.Strimework.Strimework.Strimework.Strimework.Strimework.Strimework Web.Bind.Annotation.RequestMapping; Import org.springframework.web.servlet.modelandview; @controller //コントローラーのパブリッククラスDemo01Controller {@requestmapping(path = "/test01")Public Modelandview forkest(fretrefted(frequest(frequest))リクエスト、httpservletResponse応答)servletexception、ioexception {system.out.println( "正式なパラメーターはデフォルトでインスタンス化されます"); request.getRequestDispatcher( "/web-inf/jsp/demo01.jsp")。 nullを返します。 } @RequestMapping(PATH = "/test02")パブリックモデルとビューの従来の方法JUMP_REDIRECT(HTTPSERVLETREQUESTリクエスト、HTTPSERVLETRESPONSE RESPONSE)IOEXCEPTION {SYSTEM.OUT.PRINTLN( "正式なパラメーターはデフォルトによってインスタンスされます"); Response.sendRedirect(request.getContextPath()+"/view/result01.jsp"); nullを返します。 }}注:この方法はほとんど使用しなくなりました。単純なデモンストレーションとレビューだけで、少なくともこの方法を使用してサーブレットAPIを取得できます!!!
3.コントローラーがJSPにジャンプする方法を示します
例の最後に、JSPビューパーサーを追加します。最初は、従来の方法に従っており、段階的なプロセスがあります。
パッケージcom.hanpang.web; import java.io.ioexception; import javax.servlet.servletexception; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; Import org.springframework.Strimework.Strimework.Strimework.Strimework.Strimework.Strimework Web.bind.Annotation.RequestMapping; Import org.springframework.web.servlet.modelandview; @controller //コントローラーのパブリッククラスDemo01Controller {@RequestMapping(path = "/test03")パブリックモデルのnequired exed(@requestmapping(path = "/test03") modelandview(); mav.setViewName( "/web-inf/jsp/demo01.jsp"); mavを返します。 } @RequestMapping(path = "/test04")public modelsview redirection method(){modelandview mav = new ModelandView(); mav.setViewName( "redirect:/view/result01.jsp"); //または//mav.setviewname(urlbasedviedresolver.redirect_url_prefix+"/view/result01.jsp "); mavを返します。 }} Java Web Stageメソッドのように感じますが、リダイレクト中に簡単なプレフィックスが設定されています。
4.コントローラーがコントローラーにジャンプする方法を示します
あるサーブレットから別のサーブレットへの呼び出しに似ています
パッケージcom.hanpang.web; import java.io.ioexception; import javax.servlet.servletexception; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; Import org.springframework.Strimework.Strimework.Strimework.Strimework.Strimework.Strimework Web.Bind.Annotation.RequestMapping; Import org.springframework.web.servlet.modelandview; @controller //コントローラーのパブリッククラスDemo01Controller {@RequestMapping(path = "/test05")パブリックモデルマッピングパスを直接設定します。 modelandview(); mav.setViewName( "/test03"); mavを返します。 } @RequestMapping(path = "/test06")public modelandview set redirection(){modelandview mav = new ModelandView(); mav.setViewName( "Redirect:/test04"); mavを返します。 }} 5。JSPビューパーサーを追加します
上記のデモンストレーション中に、ModelandViewのSetViewNameがジャンプを完了するために使用されることがわかりました。ここで渡されるデータは文字列ですが、処理方法は異なります。ジャンプパスがリダイレクト内でプレフィックスされている場合、処理方法は異なります。
また、/web-inf/jsp/demo01.jspに似た複数の文字列がある場合、多くのパブリックパーツがあることがわかります。 SpringMVCは、JSPページを転送するコントローラー要求の処理を専門とするクラスを提供します。
私の説明に注意してください:渡した文字列にプレフィックス識別子がないことがわかった場合、デフォルトでは、構成jspビューパーサーを使用して処理し、リクエスト転送操作を完了します
注:コア構成クラスを構成します
パッケージcom.hanpang.config; Import org.springframework.context.annotation.bean; import org.springframework.context.annotation.componentscan; Import org.springframework.context.annotation.configuration; Import org.springframework.web.web.serveletleteletelet. org.springframework.web.servlet.config.annotation.enablewebmvc; Import org.springframework.web.servlet.view.internalresourceViewResolver; Import wab.servlet.view.jstlview;@configuration@enablewebmvc@componentscan(basepackages = "com.hanpang。**。web")public class webconfig {@bean // instantiate public viewresolver viewResolver(){内部ヨーバイinternalResourceViewResolver(); jspviewresolver.setviewclass(jstlview.class); // springmvcはjstlタグjspviewresolver.setprefix( "/web-inf/"); jspviewresolver.setsuffix( "。jsp"); jspviewResolverを返します。 }} **注:**メソッド@Beanの注釈に注意してください
この方法は、次のようにXMLのコードと同等です
<bean id = "jspresourceviewResolver"> <プロパティ名= "prefix" value = "/web-inf/> <property name =" suffix "value ="。Jsp "/> <プロパティ名=" viewclass "value ="
コントローラージャンプJSPコードを改善します
このビューパーサーは、JSPリクエストのみを転送することができ、リダイレクトに対して無効です。コードのコメントコンテンツに注意してください
@RequestMapping(path = "/test03")public modelandviewデフォルトでは、forwording(){modelandview mav = new modelandview(); //mav.setviewname("/webinf/jsp/demo01.jsp "); // Advanced:デフォルトでは、JSP View Parserを使用して処理されます。 //文字列にはプレフィックスの変更を返すことがないことがわかりました。 } @RequestMapping(path = "/test04")public modelsview redirection method(){modelandview mav = new ModelandView(); //パーサーはリダイレクトを無効にしますmav.setViewName( "Redirect:/view/Result01.jsp"); mavを返します。 }コントローラージャンプコントローラーコードを改善します
@RequestMapping(path = "/test05")public modelandViewマッピングpath(){modelandview mav = new ModelandView(); mav.setViewName( "/test03"); mavを返します;}JSP View Parserを構成した後、上記のコードをもう一度テストし、驚きのアクセス結果を確認します。
「/test03」の前に私たちが言ったことに準拠しています。これは、JSPビューパーサーを使用してデフォルトで処理される文字列です。それで、それを改善する方法は?
接頭辞「フォワード:」を設定でき、コードは次のように改善されます。
@RequestMapping(path = "/test05")public modelandViewマッピングpath(){modelandview mav = new ModelandView(); mav.setViewName( "wordwer:/test03"); //または//mav.setviewname(urlbasedViewResolver.forward_url_prefix+"/test03 "); mavを返します;}文字列がフォワードで変更されていることがわかった場合:処理状況が変化し、コントローラー要求から別のコントローラーに変換されます。リダイレクトが実行された場合、コードは次のとおりです。
@RequestMapping(path = "/test06")public modelandview set redirect(){modelandview mav = new modelandview(); mav.setViewName( "Redirect:/test04"); mavを返します;} 6. InternalresourceViewResolver付録
internalResourceViewResolver:urlbasedViewResolverのサブクラスであるため、urlbasedViewResolverがサポートするすべての機能をサポートします。
実際のアプリケーションでは、内部ResourceViewResolverも最も広く使用されているビューリゾルバーでもあります。では、内部ResourceViewResolverのユニークな機能は何ですか?
文字通りの観点から、内部ResourceViewResolverを内部リソースビューのリゾルバーとして解釈できます。これは、internalResourceViewResolverの機能です。
internalResourceViewResolverは、返されたビュー名をinternalResourceViewオブジェクトに解決します。 InternalResourceViewは、コントローラープロセッサメソッドによって返されるモデル属性を対応する要求属性に保存し、リクエストをリクエストDispatcherを介してサーバー側のターゲットURLにリクエストをリダイレクトします。
たとえば、internalResourceViewResolverでは、prefix =/web-inf/、suffix = .jspはinternalResourceViewResolverで定義され、要求されたコントローラープロセッサメソッドによって返されるビュー名がテストされます。この時点で、InternalResourceViewResolverは、テストを内部ResourceViewオブジェクトに解析し、最初に対応するhttpservletrequest属性に返されたモデル属性を保存し、次にリクエストDispatcherを使用して、サーバー側の/web-inf/test.jspにリクエストを転送します。これは、internalResourceViewResolverの非常に重要な機能です。 / web-inf /に保存されているコンテンツは、リクエストリクエストを通じて直接要求できないことを知っています。セキュリティ上の理由から、通常、JSPファイルをWeb-INFディレクトリに配置し、サーバー側の内部ResourceViewがこの問題をうまく解決する方法がうまく解決できます。以下は、内部ResourceViewResolverの定義です。この定義によれば、返された論理ビュー名がテストである場合、内部ResourceViewResolverは定義済みのプレフィックスと接尾辞を追加し、「/web-inf/test.jsp」を形成し、internalResourceView URLとして使用して新しい内部ResourceViewオブジェクトを作成します。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。