response.sendRedirect方式のステアリングとRequestDispatcherのforward法の比較

1938 ワード

Java Web開発では、MVCモードを採用する場合、コントローラがモデルの呼び出しを完了した後、インタフェースを選択してユーザーに応答し、通常は2つの方法があります.
1.responseオブジェクトによるsendRedirectメソッド.
2.RequestDispatcherオブジェクトによるforwardメソッド.
例えばログイン画面loginをスキップする.jspは、次の2つの方法で使用できます.
1、responseを使う
response.sendRedirect("login.jsp");

2、RequestDispatcherの使用
RequestDispatcher rd = request.getRequestDispatcher("login.jsp");
rd.forward(request,response);

この2つの方法にはどんな違いがありますか.どのような場合にどのような方法を使うべきですか?
まず両者の違いを紹介する.
1つ目の違いは、プロセスが異なることです.1つ目の方法は、ブラウザが応答を受信した後、サーバに1回の要求を送信したので、2回の要求に相当します.第2の方法は、メソッド呼び出しに相当し、現在のファイルを実行する過程で実行ターゲットファイルに移行し、2つのファイル(現在のファイルとターゲットファイル)は同じリクエストに属し、最も本質的な特徴は、requesオブジェクトとresponseオブジェクトを共有することである.
2つ目の違いは、アドレスバーが異なることです.1つ目の方法では、ブラウザのアドレスバーにターゲットファイルのアドレスが表示され、2つ目の方法では、ユーザーがブラウザのアドレスバーに現在のファイルのアドレスが表示されます.この点も非常に重要で、後で紹介します.
使用する場合、具体的にどのように選択すればいいですか?
2つのファイルの関係が非常に密接な場合はRequestDispatcherを使用し、2つのファイルに直接的な関連関係がない場合はresponseのsendRedirectメソッドを使用します.どのような関係が密接に関係しているのか、どのような関係が直接的な関連関係がないのか.たとえば、クエリーのコントローラとクエリーの結果インタフェースの間には、クエリーコントローラが処理した後、クエリー結果インタフェースに移行する必要があるため、密接な関係があるはずです.また、例えば、情報を追加するコントローラとクエリーコントローラとの関係は直接的な関係ではありません.通常、情報を追加した後、リストインタフェースのコントローラにジャンプしてからリストインタフェースにジャンプし、情報を変更したり削除したりした後、リストインタフェースのコントローラにジャンプしてからリストインタフェースにジャンプすることもあります.
次の2つの特殊なアプリケーションを示します.
1.現在コントローラで取得している情報をrequestを介してターゲットファイルに渡す場合(request.setAttributeおよびrequest.getAttributeを介して)、RequestDispatcherを選択する必要があります.現在のファイルとターゲットファイルがrequestオブジェクトを共有する必要があるためです.通常、クエリーに使用されます.
2、データの変更(削除と追加操作を含む)機能のコントローラとその後のインタフェースまたはコントローラはresponse.sendRedirect方式を採用するべきである.RequestDiapatcherのforward方式を採用すると、重大なエラーが発生する.アドレスバーは情報を修正するコントローラであるため、ユーザがリフレッシュすると、データの修正要求が再送され、これは使用されない戸が見たい結果.だから、追加機能をするたびに、リフレッシュするたびに1つ追加する学生がいます.
第2の方法をどのように採用し、どのようにデータを伝達しますか?2つの方法があります.
1、セッションは選択できますが、2番目のファイルでは必ず削除してください.
2.要求文字列、例えばlogin.jsp?info=「ユーザーは存在しません!」