Javaの道 Javaに関する
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道 >  掲示板 >  掲示板(GETとSESSIONの値の取り回しについて)
閲覧数:1290
掲示板(GETとSESSIONの値の取り回しについて)
名前
題名 GETとSESSIONの値の取り回しについて
質問内容

質問を評価する
(0ポイント)
GoogleAppEngine向けのサーブレットを開発していますが、下のような現象がおきて詰まっています。
***.appspot.com/input?foo=3
のように、入力画面にGETパラメータで3を渡しているとします。

入力画面の一部
public void exec(HttpServletRequest req ,HttpServletResponse res) throws Exception {
String foo = "0";
Srting var = "";
Hashmap hash = new Hashmap();
if(req.getParameter("foo") != null){
  foo = req.getParameter("foo");
}
var = "var";

hash.add("foo",foo);
hash.add("var",var);

System.out.println(hash.toString());//{foo=3,var=var}と表示
ses.setAttribute("hash",hash);
ses.setAttribute("foo",foo);

req.getRequestDispatcher("input.jsp").forward(req, res);
}

確認画面の一部
Hashmap hash = (Hashmap)ses.getAttribute("hash",hash);
System.out.println(hash.toString());//{foo=0,var=var}と表示
System.out.println((String)ses.getAttribute("foo"));//0と表示


if文の中を通っているのは間違いなく、if文を抜けたあとのfooの値を出力すると3と表示されるのを確認しています。
また初期化せずにString foo;と宣言するとコンパイルエラーになります。
デバッグのため変数の中身をprintするときはJSPにforwardする手前で止めています。

JSPを呼び出すときにGETパラメータがないものとして処理し直しているように見えるのですが、セッションに格納するまでのロジックは変わりませんし、JSPでセッションを操作する記述もありません。

このような現象はJAVAの挙動としては正しいのでしょうか?
また確認画面でfoo=3を取得するにはどのようにすればよいでしょうか?


お手数おかけします。よろしくお願いします。
質問日時 2013-02-20 12:43:52
名前
回答内容

回答を評価する
(0ポイント)
訂正
入力画面execの直後
HttpSession ses = req.getSession(true);
が抜けていました

確認画面1行目
Hashmap hash = (Hashmap)ses.getAttribute("hash");

です。失礼しました。
回答日時 2013-02-20 12:59:53
名前
匿名
回答内容

回答を評価する
(0ポイント)
JSPのセッションはsessionが暗黙に宣言されてて使えるんだ
が、sesはどう作ってるんだ?
回答日時 2013-02-20 18:24:02
名前
回答内容

回答を評価する
(0ポイント)
すみません失礼しました。

ソースコードを整理したところ解消しました。

確認画面から戻ったときにセッションからhashを取り出してJSPのフォームに初期値として埋めるロジックがあるのですが、配列の初期化に失敗してはじめに入力画面に入ったときにそこのロジックが処理されたものと思われます。
回答日時 2013-02-25 11:49:23

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。



このページのトップへ
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道_CopyrightJavaの道