reponse.sendRedirect(location)とrd.forward()の違い
3087 ワード
Java Web開発では、ページをジャンプする方法がよく使われていますが、一般的には次の2つの方法があります。ジャンプ方式http://localhost:8080/Testforward法を適用すると、同じWebアプリケーションの一つのリソースにリダイレクトするしかない。sendRedirect方法は、どのURLにもリダイレクトできます。フォームフォームフォームフォームフォームフォームフォームフォームフォームのaction="/uu"sendRedirect("/uu")サーバルートに対するパスを表します。如きhttp://localhost:8080/Testアプリケーション(提出するとhttp://localhost:8080/uu)0Forwardコードの中の「/uu」は、WEBアプリケーションに対する相対的なパスを表します。如きhttp://localhost:8080/Testアプリケーション(提出するとhttp://localhost:8080/Test/uu)0 (Request Displatchインターフェースを使うForward)メソッドforward(frameがあるjspファイルにリダイレクトできません。frameがあるファイルにリダイレクトできます。同時にforward()は後ろにパラメータを持って転送できません。例えば、servlet?name=frankです。これはいけません。次のページに転送します。リダイレクトしたらブラウザのアドレスバーのURLは変わりません。クライアントが出力されていない場合のみ、forwardメソッドを呼び出すことができます。現在のページのバッファが空ではない場合は、forwardメソッドを呼び出す前にバッファをクリアしてください。「/」はウェブアプリケーションとの相対的なRequest Displatchを表す。 カード = request.getRequest Displatch(「/ooo」);d.forward(request) レスポンス送信先http://localhost:8080/Test/ooo Request Displatch カード = get Servlet Contect().get Request Displatch("/ooo")d.forward(request) レスポンス送信先http://localhost:8080/Test/ooo Request Displatch カード =get Servlet Contect().get NamedDisplatch("TestServlet")(TestServletは一つ)rd. forward(request) レスポンスTestServletという名前のservletに提出しましたが、以前に多くの出力があった場合、前の出力がバッファ領域を満たしていて、自動的にクライアントに出力されます。この文は機能しなくなりますので、特に注意すべきです。また、ブラウザのアドレスを変更することはできません。更新すると繰り返し提出されます。http://localhost:8080/Test/gw/page.jspJSPページで解析された後、PageConttext.forwardに変換します。「/OtherPage.jsp」に提出してください。http://localhost:8080/Test/OtherPage.jsp 「OtherPage.jsp」が提出されました。http://localhost:8080/Test/gw/OtherPage.jsp (HttpServletResonseインターフェースを用いたsendRedirect)方法302は、ユーザのブラウザで動作し、sendRedirect()パラメータを持って転送できます。例えば、servlet?name=frankは次のページに転送されます。同時に、別のホストにリダイレクトできます。sendRedirect()は、frame.のjspファイルをリダイレクトできます。転送コードが登録されたservlet-urlが/gg/ttであると仮定します。jspは、jspは/gg/jsp:絶対パスです。http://www.brainysoftware.com ")送信先http://www.brainysoftware.com ルート:レスポンス.sendRedirect(「/ooo」)を送信します。http://localhost:8080/ooo 相対パス:レスポンス.sendRedict(「ooo」)を送信します。http://localhost:8080/Test/ggg/ooosendRedirectはこの方式のreponse.set Startusに相当します。String newLocn = 「/newpath/jsa.jsp」;reponse.set Header(「Location」,newLocn); Refresh)方法200は、HTMLによって提供され、Meta自体がHTMLタグである。使用方法は、対応するjavaコードStringである。 content=stayTime+「;URL=」+URL;reponse.set Header(「REFRESH」,content); レスポンス.sendRedirectを使用してアドレスバーを変更します。request.get Request Disparch()を使用します。forwardアドレス欄の情報はそのまま維持されます。 request.set Attributeに保存されているものは方法2だけでジャンプします。 やっと新しいページで を取り出すことができます。 redirect まずブラウザにレスポンスを送って、 ブラウザでこのレスポンスを受け取ったら、もう一つのrequestをサーバーに送ります。 そして、サーバーからブラウザに新しいレスポンスを送信します。 この時のページに届いたrequestはブラウザから新しく送られました。forwardです。 サーバ内部で発生しました。 ブラウザが全く知らない状況でブラウザに別のページのレスポンスを送った。 この時、ページに届いたrequestはブラウザから直接送られてきたのではなく、データを入れたかもしれません。 request.set Attributeに預けられているもの メソッド2だけでジャンプします。 やっと新しいページで を取り出すことができます。
HttpServletResponse response = new HttpServletResponse();
response.sendRedirect(location)
RequestDispatcher rd = new RequestDispatcher();
rd.forward(request, response)