サーブレット:
もちろん、サーブレットでは、通常、ジャンプは doGet、doPost、およびその他のメソッドで発生します。
1) リダイレクト方式
response.sendRedirect("/a.jsp");
ページへのパスは相対パスです。 sendRedirect は、必ずしもこの Web アプリケーションに限定されず、次のような任意のページにジャンプできます。
response.sendRedirect("//www.VeVB.COm");
ジャンプ後にブラウザのアドレス バーが変わります。
この方法で値を渡したい場合は、パラメータを URL に含めるか、セッションに置くことしかできません。request.setAttribute を使用して渡すことはできません。
2) フォワード方式
RequestDispatcher ディスパッチャー = request.getRequestDispatcher("/a.jsp");
ディスパッチャ .forward(リクエスト, レスポンス);
ページへのパスは相対パスです。 forward メソッドは、この Web アプリケーション内のページにのみジャンプできます。
ブラウザのアドレス バーはジャンプ後も変化しません。
このメソッドを使用してジャンプすると、URL 内のパラメーター、セッション、request.setAttribute の 3 つのメソッドを使用して値を渡すことができます。
JSP:
1) 応答.sendRedirect();
サーブレットのresponse.sendRedirect()と同じメソッド。
このステートメントの前に Out.flush() を指定することはできません。ある場合は、例外が発生します。
java.lang.IllegalStateException: データがクライアントにコミットされた後は sendRedirect() を実行できません。
com.caucho.server.connection.AbstractHttpResponse.sendRedirect(AbstractHttpResponse.java:558) で
...
ジャンプ後にブラウザのアドレスバーが変化する
別のホストにジャンプする場合、ジャンプ後、このステートメントに続くステートメントは新しいスレッドが開かれたかのように実行を続けますが、応答の操作は無意味です。
同じホストにジャンプする場合、このステートメントに続くステートメントが実行されるまでジャンプは行われません。
2)response.setHeader("場所","");
Out.flush() がこのステートメントの前にある場合、ページはジャンプしません。
ジャンプ後にブラウザのアドレスバーが変化する
このステートメントに続くステートメントが実行されるまで、ジャンプは発生しません。