Web ページの転送とリダイレクト

jacklove
リリース: 2023-03-31 17:02:01
オリジナル
2296 人が閲覧しました

Web 開発では、転送とリダイレクトには大きな違いがあります。

直感的に言えば、転送では URL アドレスは変更されませんが、リダイレクトでは URL が変更されます。

これは単なる外観です。

HttpServlet の要求オブジェクトと応答オブジェクトはカプセル化され、ユーザーが Web ページを要求したときにブラウザーから渡されたパラメーターに基づいてサーバーによって生成されます。ブラウザからリクエストが行われ、サーバーが応答を返すと、リクエストとレスポンスは寿命を迎えたことになります

転送を使用する場合、ブラウザは 1 回のみリクエストしますが、サーバーでは複数のジャンプが発生する可能性があります。サーバー側の実行中に転送が発生した場合、サーバーは実行中のタスクを停止し、指定されたアドレスに転送するタスクを指定します。

リダイレクトを使用すると、ブラウザはサーバーに対して複数のリクエストを行います。コードがサーバー側で実行されるときにリダイレクトが発生すると、ブラウザーに別の URL にアクセスするように通知されます。ブラウザは、送信された URL からリソースを要求します。

コードの一部を見てください:

<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>login</title></head><body>
    <form action="myServlet" method="post">
        name :<input type="text" name="username"/><br/>
        <input type="submit"  value="submit"/>
    </form></body></html>
ログイン後にコピー

これは JSP コードの一部であり、[送信] をクリックすると、フォームが myServlet に送信されます。

インターフェイスは次のようになります:


##

public class MyServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = (String)request.getParameter("username");
        request.setAttribute("welcome", "welcome!!!");
        RequestDispatcher rd = request.getRequestDispatcher("welcome.jsp");
        rd.forward(request,response);
    }
}
ログイン後にコピー
Web ページの転送とリダイレクトこれは MySerlet です。ユーザーがクリックしてフォームを送信すると、サーバーは doPost メソッドを呼び出します。 MyServlet のこのメソッドで行われるのはページ転送です。

<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>welcome</title></head><body>
    <%=request.getParameter("username")%>
    <br/>
    <%=request.getAttribute("welcome") %></body></html>
ログイン後にコピー

これは、welcome.jsp のコードです。

送信結果は次のとおりです:


送信ボタンをクリックした後、ネットワーク要求プロセスを確認できます。 Web ページの転送とリダイレクト

Web ページの転送とリダイレクトブラウザがサーバーにリクエストを 1 つだけ送信したことがわかります。

次に、リダイレクトについて見てみましょう。

MyServlet のコードを変更した場合。

public class MyServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = (String)request.getParameter("username");
        request.setAttribute("welcome", "welcome!!!");//      RequestDispatcher rd = request.getRequestDispatcher("welcome.jsp");//      rd.forward(request,response);
        response.sendRedirect("welcome.jsp");
    }
}
ログイン後にコピー

結果は次のとおりであることがわかります:


Web ページの転送とリダイレクトそしてブラウザ アイテム サーバーは 2 つのリクエストを送信しました:


Web ページの転送とリダイレクト上から結果は、リダイレクト後、別のリクエストが開始されるため、ウェルカム ページのコンテンツがすべて null であることがわかります。転送は同じリクエストオブジェクトとレスポンスオブジェクトであるため、ブラウザからリクエストされたパラメータを取得できるだけでなく、リクエストに入れられた属性値も取得できます。

実際、コードからは、sendRedirect() メソッドが HttpServletResponse オブジェクトの応答メソッドであることがわかります。応答オブジェクトのメソッドが呼び出されるため、リクエスト全体が終了したことがわかります。そしてサーバー側アイテムクライアントは実行結果を返します。 getRequestDispatcher メソッドはリクエスト オブジェクトのメソッドで、リクエストがまだ行われているため、結果はブラウザにすぐには返されませんが、転送タスクは引き続き実行されることを示します。

forward メソッドで渡す場合でも、sendRedirect メソッドで渡す場合でも、注意が必要な点が 1 つあります。これは、この URL がサーブレット コンテナのルート、つまり localhost:8080 に対するリクエストであることを意味します。「\」で始まらない場合は、リクエスト アドレスが現在のリクエスト URL

を基準にしてアドレス指定されていることを示します。 。

<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>login</title></head><body>
    <!--这里改成了绝对地址  -->
    <form action="/myServlet" method="post">
        name :<input type="text" name="username"/><br/>
        <input type="submit"  value="submit"/>
    </form></body></html>
ログイン後にコピー
もう一度送信をクリックすると:


「\」で始まらないリクエスト アドレスは: Web ページの転送とリダイレクト


転送モデルは次のとおりです: Web ページの転送とリダイレクト


リダイレクト モデルは次のとおりです: Web ページの転送とリダイレクト

この記事では、Web ページの転送とリダイレクトなどについて説明します。関連コンテンツ php 中国語 Web サイトにご注意ください。 Web ページの転送とリダイレクト

関連する推奨事項:

単純な PHP MySQL ページング クラス


再帰を使用しない 2 つのツリー配列コンストラクター


HTMLをExcelに変換し、印刷・ダウンロード機能を実現

以上がWeb ページの転送とリダイレクトの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!