teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

番号が不正だったため訂正しました。

2017/06/04 03:44

投稿

A-pZ
A-pZ

スコア12011

answer CHANGED
@@ -1,11 +1,11 @@
1
- 1. redirect=trueをつけなればforwardになります。特に禁則はありませんが、リダイレクトは一度ブラウザへレスポンスするのに対し、フォワードはブラウザへレスポンスせずにサーバ側で別のURLへ遷移します。
1
+ 1 redirect=trueをつけなればforwardになります。特に禁則はありませんが、リダイレクトは一度ブラウザへレスポンスするのに対し、フォワードはブラウザへレスポンスせずにサーバ側で別のURLへ遷移します。
2
2
 
3
3
  このため、リダイレクトは遷移先にリクエスト情報が受け継がれませんが、フォワードは受け継がれます。
4
4
  このリダイレクトとフォワードの違いがわかると、より理解が深まるでしょうか。
5
5
 
6
- 2. "ActionFormをパラメータとする" の言い回しに、言いづらいのですが誤解がありそうに思えました。
6
+ 2 "ActionFormをパラメータとする" の言い回しに、言いづらいのですが誤解がありそうに思えました。
7
7
  リクエストパラメータやクエリ文字列を受け取るのがActionFormです。
8
8
  リダイレクト時は 1の回答にもありますように、一度レスポンスを出力してしまうため、リクエスト情報は共有されません。そのため、リダイレクト先のURLにも何らかの値を引き継げるよう、URLの一部(=クエリ文字列)に格納するか、またはHttpSession領域へ一時的に格納しておく手法を使います。
9
9
 
10
- 3. ActionFormをsession管理に置くと、複数Action間で共有できるためとても使い勝手は良いですが、セッションが破棄されるか、明示的に自らオブジェクトを削除しない限り残り続けます。
10
+ 3 ActionFormをsession管理に置くと、複数Action間で共有できるためとても使い勝手は良いですが、セッションが破棄されるか、明示的に自らオブジェクトを削除しない限り残り続けます。
11
11
  これはメモリを圧迫する要因にもなりますが、思わぬところでセッションから値を拾ってきてしまって入力していない値が表示される不具合も生みやすいでしょう。使い終わったセッションオブジェクトは必ず破棄するか、初期化するActionを設定することが必要です。