0

私は、戦争でパッケージ化されたサーブレットを実行して、リクエストをリッスンし、別のページに外部 div を設定するプロジェクトに取り組んでいます。サーブレット (a) に対して最初の要求が行われ、表示するデータがある場合は、その HTML がレンダリングされます。データがない場合は、クエリ文字列を別のサーブレットに渡してリクエストを処理し、オプションを選択してページをレンダリングします。

Windows Server 2008 で Tomcat 6 を実行しています。

しかし、私は2つの問題に遭遇します:

  1. リダイレクトを使用すると、リダイレクト先のサーブレットから応答がありません。
    (b)サーブレットによって呼び出されることのない JavaScript アラートがいくつかあります。相対パスを使用しており、ログでリンクが正しいことを確認しています。
  2. ステップ 1 でそのリンクを新しいウィンドウにコピーすると、結果が表示されます。リクエストを行う別のページに埋め込まれている場合はそうではありません。なぜでしょうか?ホストページの制限で、応答をレンダリングできない可能性がありますか?
  3. 転送を使用すると、サーブレットの応答が表示されますが、新しいウィンドウが開きます。したがって、元のページから人を遠ざけます。結果が同じページに表示される場合、これは素晴らしいことです。

最初のサーブレットからの応答オブジェクトを使用して、最初のサーブレット呼び出しから別のサーブレットに「リダイレクト」できることを保証するためのベスト プラクティスは何ですか?

4

1 に答える 1

2

Locationリダイレクトは、クライアントが処理する必要があるヘッダーに新しい URL を含む HTTP 302 応答を返します。基本的に、JS コードは、応答ステータス コードが 302 であるかどうかを確認し、Locationヘッダーを抽出して、新しい要求を再送信する必要があります。これをレスポンスステータスコードが200になるまで繰り返します。

ブラウザーのアドレス バーに URL を貼り付けたときに機能するのは、ブラウザーが 3nn 応答を適切に処理する方法を既に知っているためです。ブラウザーの webdeveloper ツールセットでネットワーク トラフィック トラッカーを開くと、新しい URL で 2 番目の GET 要求が発行されていることがわかります。

別の方法として、サーブレットが同じコンテナーで実行される場合は、RequestDispatcher#forward()代わりにHttpServletResponse#sendRedirect().

于 2012-05-22T17:10:19.190 に答える