1

ArrayList's現在、以下のコードを使用して、サーブレットから JSP ページに一部を渡しています。

    RequestDispatcher rd = null;
    request.setAttribute("date",al);
    request.setAttribute("bau",al1);
    request.setAttribute("project",al2);
    rd = request.getRequestDispatcher("ResourceChart.jsp");
    rd.forward(request,response);

問題は、ページで更新をクリックすると、同じ日付が再び渡され、奇妙な結果になることです。サーブレットが変数を再生成して渡すのを避けるために、JSP ページにも転送する必要がありますか?

これを実装する最良の方法は何ですか?

4

1 に答える 1

1

どうやら POST リクエストを更新し、データが再送信されるというブラウザの組み込み警告を無視/確認しています。その場合、doPost()メソッドは実際に以前に送信されたデータで再実行され、DB 内のエントリが重複するだけになります。

POST リクエストの更新時に二重送信を回避する標準的な方法は、POST リクエストの後にリダイレクトを送信することです。リダイレクトは暗黙的に新しい GET リクエストを作成します。リフレッシュすると、GET リクエストのみが再実行されますが、これはまったく無害です。

これを実現するには、質問に示されている行をすべてdoPost()次の 1 行に置き換えます。

response.sendRedirect(request.getContextPath() + "/ResourceChart");

(サーブレットが の URL パターンにマップされていると仮定します/ResourceChart)

doGet()そして、リストを準備するために必要なロジックとともに、削除されたすべての行を元に戻す新しいメソッドを作成します。必要な唯一の変更は、JSP ファイルをフォルダーに配置して、サーブレットを最初/WEB-INFに呼び出さずに URL を入力または推測することによって、エンドユーザーが JSP ファイルを直接開くことができないようにすることです。doGet()

request.getRequestDispatcher("/WEB-INF/ResourceChart.jsp").forward(request, response);

以下も参照してください。

于 2013-03-28T21:22:17.323 に答える