0

私はいくつかのことを行うサーブレットを持っています。それが完了すると、リクエストにいくつかのものを入れ、その後jspページを呼び出す別のサーブレットを呼び出します。私はコードを書きます:

最初のサーブレット (InserisciLezione)

            request.getRequestDispatcher("/TakeDates").forward(request, response);

2 番目のサーブレット (TakeDates)

 RequestDispatcher dispatcher = request
            .getRequestDispatcher("GestioneCalendario.jsp");
    dispatcher.forward(request, response);

これは適切に機能しますが、問題は私がまだ持っているページのURLにあります:

 http://localhost:8080/Spinning/InserisciLezione?data=20-02-2013

ページを更新すると、最初のサーブレットが再度呼び出されますが、これは望ましくありません。私はを頂きたい

 http://localhost:8080/Spinning/GestioneCalendario.jsp

なんで?前もって感謝します!

4

3 に答える 3

2

sendRedirect代わりに使用できますforward

前方

  1. 転送はサーバー側で発生し、サーバーは同じリクエストを別のリソースに転送します。
  2. この場合、同じリクエストが別のリソースに転送されるため、すべてのリクエスト パラメータとリクエスト属性が利用可能になります。servlet1 の req,ans resp オブジェクトはありません。ser1 と ser2 の値を取得することはできません。
    注意:
    Forward を呼び出す必要があります。応答がクライアントにコミットされる前にそうしないと、例外が発生します。
    制限 :
    リクエストをコンテキスト外に転送することはできないため、リクエストはサイト内にある必要があります。
    利点 :
    2 番目の呼び出しがコンテナーの知識なしで行われ、クライアントからサーバーへの往復がないため、パフォーマンスに関しては少し速くなります。

リダイレクト

  1. これはブラウザ側で発生し、サーバーがhttpステータス コード 302 をブラウザに送信するため、ブラウザは新しいリクエストを作成します。リダイレクトには、ブラウザからサーバーへのラウンド トリップがもう 1 回必要です。
  2. これは新しいリクエストであるため、古いパラメータと属性は使用できません。
    利点:
    コンテキストの外にあるサーブレットにもアクセスできるため、他の Web サイトにあるサーブレットを呼び出すことができます。
    制限:
    往復のパフォーマンスが少し遅く、
于 2013-02-13T11:21:43.850 に答える
1

RequestDispacherインターフェースは、html、サーブレット、jspなどの別のリソースにリクエストをディスパッチする機能を提供します。このインターフェースを使用して、他のリソースのコンテンツを含めることもできます。これはサーブレットコラボレーションの方法の1つです。

あなたの場合、あなたはこれを手に入れています

http://localhost:8080/Spinning/GestioneCalendario.jsp 

このサーブレットのため

 RequestDispatcher dispatcher = request
            .getRequestDispatcher("GestioneCalendario.jsp");
    dispatcher.forward(request, response);

ページの更新により、使用したサーブレットが使用するURLに常にリダイレクトされます。これは、ajaxイベントを呼び出すようなものです。

とにかく私はあなたがフォワードメソッドを使用する必要がないことがわかります、使用してみてください

response.sendRedirect(your_url);
于 2013-02-13T11:22:40.120 に答える