30代半ばの事務職員がITエンジニアになった話

おおよそタイトルのとおり、30代半ばにしてITエンジニアのタマゴになってしまった会社員の話

【Java】サーブレット・jsp間のデータ受け渡し方法と、SubmitしてPOST・GETでリクエストを送信するとデータが重複して送られてくる件

JavaでWebアプリケーションを開発中


たいがい多いのは
サーブレットjspを連携
させるパターン


サーブレットjsp間で
POST・GETで数値をやりとり
という概念を理解するのに
なかなか苦労した


っていうかPHPだったら
こんなに苦もなく
htmlに組み込んで書けるのに


とは思うけど今は
いろんな言語を覚えることが
きっと何かの役にたつ(はず)


で、いろいろ試行錯誤して考えたのが

可変の2次元配列でデータ受け渡し


2次元配列というと

String[][]

あたりが思い浮かぶけど
これは先に上限値を設定
しないといけないので
個人的には使いにくい


なので

ArrayList<ArrayList<String>>


可変の2次元配列を使用して
java側でDBのデータを取得し
サーブレットに送った上で
jspに渡したり


jspからPOST・GETで送られた
データをサーブレット
2次元配列として受け取ったり



具体的にはjsp側で

<form method="post">
<input type='text' name='y[]' value=''>
<input type='text' name='z[]' value=''>
<input type="submit" name="submit" value="submit">
</form>

的なかんじで
配列のデータをPOSTで送る



サーブレットでは

public static ArrayList<ArrayList<String>> x;
…
ArrayList<String> xx = new ArrayList<String>();
if なんちゃらかんちゃら
for なんちゃらかんちゃら
xx.add(request.getParameterValues("y[i]"));
xx.add(request.getParameterValues("z[i]"));
…
x.add(xx);

的なかんじで
受け取ったPOSTの配列を
可変2次元配列に格納する


受け取ったデータを表示すると
なぜか重複して送られてきている…
エラーはでてない


原因として目がいくのは
ifとかforのあたりなわけで
何度も見直したけど
たぶん間違いはない



よくよく挙動を見ると
1回目のSubmitでは
正常なデータで
2回目のSubmitで
重複したデータ


いつも2回目でおかしいと
思って止めてしまっていて
謎が解けなかったけど
3回目で送信すると
データが3重になった!


ということでやっと
変数が初期化されていない
ことに気づく

public static ArrayList<ArrayList<String>> x;
…
x = new ArrayList<ArrayList<String>>();
ArrayList<String> xx = new ArrayList<String>();
if なんちゃらかんちゃら
for なんちゃらかんちゃら
xx.add(request.getParameterValues("y[i]"));
xx.add(request.getParameterValues("z[i]"));
…
x.add(xx);


変数を初期化する
new ~ を追加して
やっと解決
これで費やした時間
実に約1日…



とりあえず動けばいいや的なノリで
コードを書いてしまうことが多くて
変数の宣言やら初期化やら
はしょってしまうことがあるのですが


やっぱりそれぞれにちゃんと
意味があって
まずは教科書通りにやらないと
時間を無駄にするんだなぁ、と教訓