1. ホーム
  2. java

[解決済み] response.sendRedirect()とrequest.getRequestDispatcher().forward(request,response)の違いは何ですか[重複]?

2022-03-01 10:36:11

質問

JAVAを使用すると、ページがジャンプする問題が発生しました。 を使用した場合。

response.sendRedirect("login.jsp")

をクリックすると、このようなurlが表示されます。 http://localhost:8080/login.jsp

しかし、もし私が

request.getRequestDispathcer("login.jsp").forward(request, response)

をクリックすると、このようなurlが表示されます。 http://localhost:8080/Shopping/login.jsp ("Shopping" は私のモジュールの名前です)。

何が違うの?

どのように解決するのですか?

簡単に違いを説明すると

  response.sendRedirect("login.jsp");

は contextpath (サーブレットがバンドルされているアプリケーション/モジュールを指します) を先頭に付けません。

が、一方

 request.getRequestDispathcer("login.jsp").forward(request, response);

は、それぞれのアプリケーションの contextpath を前置します。

さらに リダイレクトリクエスト は、リソースを異なるサーバやドメインにリダイレクトするために使用されます。この制御の移行タスクは、コンテナによってブラウザに委ねられる。つまり、リダイレクトはブラウザ/クライアントにヘッダを送り返します。このヘッダには、ブラウザがリダイレクトするリソースの URL が含まれています。それからブラウザは与えられた url に対して新しいリクエストを開始します。

リクエストの転送 は、呼び出し元のサーバー内で利用可能なリソースに転送するために使用されます。この転送はコンテナが内部で行うものであり、ブラウザやクライアントは関与しない。