JSPを用いた配列データのサーバ送信と表示方法

このQ&Aのポイント
  • JSPを利用して、JavaScriptを通じてサーバに配列のデータを送信し、サーバから返された文字列を表示する方法について教えてください。
  • 質問者は配列のデータを作成し、JavaScriptの関数を使用してそれをサーバに送信したいと考えています。次に、サーバから返されたデータをHTMLのテーブルなどを使って表示したいと思っています。
  • 具体的なサンプルコードや手順などを教えていただけると助かります。
回答を見る
  • ベストアンサー

JSPを用いて、サーバに配列のデータを送信し、サーバから返された文字列

JSPを用いて、サーバに配列のデータを送信し、サーバから返された文字列を表示させるようなページを作りたいと思っています。 APサーバで処理させた文字列を表示させたいのです。 データの作成までは以下のような感じで配列のデータを作ることまではわかるのですが、 それをAPサーバを介してJSPに表示させる方法がよくわかりません。。 for (int i=0; i < 10000; i++) { String str= "test" + i ; ArrayList list = new ArrayList(); list.add(str); } JSP入門ページを見ていても、テキストボックスやチェックボックスに入力された値をボタンを押したときに サーバに送信する、といった内容ばかりで…。 イメージとしては以下を考えているのですが、、、どう書いたら良いのか…。 A:上記の配列データを作成して、サーバに送信   (javascriptの関数などを利用してサーバ送信することはできるのか?どうやって渡すの?) B:Aから送られてきた配列データをHTMLの<table>などを利用して表示 サンプルのコードなど簡単でも良いので教えていただけると助かります。 抽象的な質問ですみません。

  • Java
  • 回答数2
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • onosuke
  • ベストアンサー率67% (310/456)
回答No.2

質問内容を実現するためには、 JSPとは関係の無い知識が必要です。 (当然、JSP入門ページには記載がない) そのため、実現方法が良くわからなくなっていると察します。 とりあえず、 質問A:配列データをサーバに送信する方法 がわかれば、解決できそうな気がするので、質問Bの回答は割愛します。 以下、質問Aの回答です。 ---------------------------------- まず、重大原則、 「ブラウザは、HTMLフォームの送信しかできません」 従って、配列データを送信したい時は、 「ブラウザ内で配列データをHTMLフォーム項目に変換」した後、 「HTMLフォームを送信」する ことになります。 「配列データをHTMLフォーム項目に変換」する方法ですが、 ここでJavaScriptが活躍することになります。 HTMLフォーム項目としては、  ・「selectタグ」+「multipleオプション」で複数項目を選択する。 を利用するのが適切でしょう。 なお、JavaScriptで、HTMLフォームを作成する方法の詳細は、 JavaScriptの入門ページなどを参照してください。 なお、JavaScriptは後回しにして、  テスト1.手書きでHTMLフォームを作成してJSPの単体動作テスト  テスト2.JavaScriptでHTMLフォームを自動生成して、JSP+JavaSciptの結合動作テスト と作業を進めるのも一つのやりかただと思います。

rurarara
質問者

お礼

ありがとうございます。 たいへん参考になりました。 人のコードを真似していくつか作ったことがあるのですが 基本的な仕組みや考え方がまだ理解できていないもので…。 >HTMLフォーム項目としては、 > ・「selectタグ」+「multipleオプション」で複数項目を選択する。 具体的な実現方法までご提示いただきありがとうございます。 がんばってみます。

その他の回答 (1)

  • Yanch
  • ベストアンサー率50% (114/225)
回答No.1

JSP が何をするためのものかわかってない。 また、AP サーバと JSP の関係もわかってない。 様に、思われます。 その辺りから、勉強し直してみると良いでしょう。

関連するQ&A

  • javaでDBから取得したデータのJSP表示

    JAVAでDBから取得し ArrayList shikakuCdList = shikakuCd_Data(); request.setAttribute("shikakuCdList", shikakuCdList); JSPでコンボボックスに表示しようと思います <% ArrayList bumonlist = (ArrayList)request.getAttribute("bumonCdList");%> <% for ( int i = 0; i < bumonlist.size(); i++ ){%> <option value=" (1)ここの記述方法も  "></option> <% }%> という記述にしていますが、うまく動きません。 よろしくお願いします。

    • ベストアンサー
    • Java
  • 文字列の動的確保とポインタ配列について

    C言語についての質問です。 現在、キーボードから文字列を読み込みファイルに保存するプログラムを作成しています。 プログラムの条件は、以下の通りです。 1: キーボードから英数字(最長でMAX_LEN(1000)-1文字)を入力して文字列(文字配列)dataに格納後、画面に表示する。 2: 入力された文字列と同じ長さの文字列を格納する領域を動的に確保し、文字列dataをその領域に コピーする。なお、必要な文字配列の長さは文字列の長さ+1バイトである。 3: 文字列endが入力されるか、入力された文字列がNUM_STRING(10)個になるまで1~2の処理を繰り返す 4: 各文字列へのポインタを格納する(char *)型ポインタの配列str_p(サイズ:NUM_STRING)を定義して利用する。 5:1~2の処理が終了した後で、メモリに格納されたすべての文字列をファイルに出力する。ファイル名はoutput.txtとし、最初の行に文字列の個数を、次の行以降に入力された順番と「逆の順番」で文字 列を出力すること。 実行例 input ->st22 st22 input->st1 st1 end ファイルの中身 2 st1 st22 現在完成しているプログラムは以下の通りです。 #include<stdio.h> #include<string.h> #include <stdilb.h> #define NUM_STRING 10 #define MAX_LEN 1000 int main (void) { int n, i; char data[MAX_LEN] = {}; char *str_p[NUM_STRING]; FILE *fp; do { printf("input->"); scanf("%s", data); if (strcmp(data, "end") == 0) { break; } else { printf("%s\n", data); n++ 2の処理 } while(n <= NUM_STRING); if ((fp = fopen("output.txt", "w")) == NULL) { fprintf(stdout, "File open error\n"); } fprintf(fp, "%d\n", n); for (i = n-1; i>0; i--) fprintf(fp, "5s\n", str_p[i]); fclose (fp); return 0; } 特に動的確保のところがよく分かりません。 回答よろしくお願いします。       

  • C#のGUIからサーバー側のPHPへ文字列を送信

    するプログラムを作っている途中で疑問箇所があります。 まず、クライアントというかC# GUI側のコードなのですが 以下、実際にHTTPリクエストを送る箇所のみですが this.postData = "value=" + HttpUtility.UrlEncode(this.box_01.Text,this.encode) + "&key=" + HttpUtility.UrlEncode(this.box_02.Text,this.encode); //this.postData = "test=日本語テスト"; //========================================================== //バイト配列型に変換※URLエンコード済みの文字列をアスキー文字列に変換 //========================================================== this.postDataBytes = Encoding.ASCII.GetBytes(this.postData); MessageBox.Show(this.postData); //MessageBox.Show(this.postDataBytes); string temp = ""; for(int i = 0; i < this.postDataBytes.Length; i ++){ temp += (char)postDataBytes[i]; } MessageBox.Show(HttpUtility.UrlDecode(temp)); //デバッグ //引数に通信先URLを指定してWebRequestクラスのインスタンスを作成 //httpリクエストインスタンスを作成 this.http = WebRequest.Create (url); this.http.Method = "POST"; //メソッドの指定 this.http.ContentType = "application/x-www-form-urlencoded"; //ContentTypeの指定(※必須) //送信するデータの長さを指定 this.http.ContentLength = this.postDataBytes.Length; MessageBox.Show(this.http.ContentLength.ToString()); //データ送信用のストリーム this.requestStream = http.GetRequestStream(); //送信するデータを書き込む this.requestStream.Write(this.postDataBytes,0,this.postDataBytes.Length); //送信終了 this.requestStream.Close(); //サーバーからの応答を取得 this.response = http.GetResponse(); Stream reponseStream = this.response.GetResponseStream(); StreamReader sr = new StreamReader(reponseStream,this.encode); MessageBox.Show(sr.ReadToEnd()); sr.Close(); MessageBox.Show (this.box_01.Text); まずGUI側の流れとしてはFormの中に二つのTextBoxを配置し二つの入力された値を urlencodeして一般的?なHTTPリクエストのクエリ状態にしてます。 で途中で this.postDataBytes = Encoding.ASCII.GetBytes(this.postData); という処理の箇所で、Urlencodeした文字列をアスキーコード?に変換しているようです。 実際に、コンソールに出力して、文字列が数字のみの配列になったのを確認しました。 そのまま、StreamWriterで書き込み・・送信しています。 で最終的にPHP側にHTTPリクエストして、レスポンスをMessageBoxで表示させます。 PHP側のソースですが <?php //$str = urldecode($_POST["value"]); $str = $_POST["value"]; $str_01 = $_POST["key"]; $fp = fopen("./sharp.txt","w+"); fwrite($fp,$str.$str_01); print "あなたの入力した内容は". $str."ですね\r\n"; print "keyの値は".$str_01."ですね"; ?> という記述をしており最終的にGUIのMessageBoxに表示されるのは print "あなたの入力した内容は". $str."ですね\r\n"; print "keyの値は".$str_01."ですね"; この部分に、入力した値がはいった文字列が表示されます。 で上記の流れの中で、C#側で途中Urlencodeしてそれをアスキーコードに変換してます。 そのアスキー文字をPHP側にリクエストしているのですが、これってPHP側で勝手にアスキー文字をもとのurlencodeの状態に復元し、さらにurldecodeしてマルチバイトの文字の状態にまで復元して表示しているということなのでしょうか? 識者の方ご教授ください。 よろしくお願いします。

  • 文字列を配列化する方法を教えてください!

    1列の文字列を配列化する方法を教えてください。 メモリの確保らしいのですが、参考になるソースが拝見できれば嬉しく・・・main から参照したいです。 char Text[] = "AAAA\nBBBB\nCCCCCCCC\nDDD\n";  ↓ char str[0] = "AAAA";    str[1] = "BBBB";    str[2] = "CCCCCCCCC";    str[3] = "DDD"; どうやったらいいのか全くイメージがわかないので、 よろしく御願いします!

  • 二次元配列による文字列の配列の受渡しについての質問です。

    二次元配列による文字列の配列の受渡しについての質問です。 #include <stdio.h> void print_pname(char str[][5], int n) { int i, j; for (i = 0; i < n; i++) { printf("str[%d] = \"", i); for (j = 0; str[i][j] != '\0'; j++) putchar(str[i][j]); printf("\"\n"); } } int main(void) { char ary[][5] = {"Lisp", "C", "Ada"}; print_pname(ary, sizeof(ary) / sizeof(ary[0])); return 0; } 上のプログラム中の関数print_pnameの引数char str[][5]についてですが char (*str)[5](配列のポインタ)と変更した場合にwarningが多数発生します。 これはどうしてでしょうか? また、上のプログラムを配列のポインタを使って変更することは可能でしょうか? 以上、よろしくお願いします。

  • JSPとJAVAを使ってデータ送信をしたいです。

    JSPサーブレットを勉強中です。Javaにデータを送信したいのですが、分からないことがあり、質問させていただきました。 JSPのページのテキストボックス内に以下のデータを取り込みました。(一つのテキストボックス内です。) --------------------------------------- <Memory> 2010/11/11 21:51:06.000 FM36J07,009059,0 2010/11/11 21:49:24.000 11113331 2010/11/11 21:49:27.000 11111115 2010/11/11 21:49:28.000 33333335 2010/11/11 21:49:29.000 33331119 2010/11/11 21:49:30.000 55551113 2010/11/11 21:49:31.000 22224446 2010/11/11 21:49:32.000 22225559 2010/11/11 21:49:33.000 22224446 <End> --------------------------------------- このデータはバーコードリーダーにより商品をスキャンし、テキストボックス内に取り込んだ日時と商品IDだとします。 2010/11/11 21:49:24.000などの部分は取り込んだ日時で、11113331などが商品IDです。 以下に続くデータも同じです。 このように取り込んだデータを「送信」ボタンにより次のページ(JAVA)に送信し、日付と商品IDを別に取り出し、それぞれデータベース上に格納したいです。 格納場所は Flowテーブル ID id int, 商品ID c_id int, 時間 time datetime です。 一つのIDに対し、商品IDと時間を全て取り込みたいのです。 ちなみに商品ID(11113331など)は別テーブル(Departmentテーブル)で格納済みです。 現時点では、 JSPのページで <form action="../servlet/Page.Read"> <textarea name="flow" rows="25" cols="50"></textarea> <input type="submit" value="送信"> のように書き、"flow"をRead.javaのページに送信しようとしてますが、この後、Read.javaのページでどのように受け取り、Flowテーブルに格納すればよいか分からなく、困っています。 バラバラにしてから、Read.javaに送るのか、1つで送って、Read.javaでばらばらにするのか・・ 受け取ったFlowをばらばらにして、データベースに接続して、SQLを発行して、テーブルにデータを格納・・・ どうにせよ、実力不足でバラバラにできないのでお手上げ状態です。 分かりづらい質問で申し訳ないのですが、具体的なソース等、どなたかご教授よろしくお願いします。

    • ベストアンサー
    • Java
  • JSPで&文字列を受け取る方法

    サーバー側のJSPを作っています。 送られてくるパラメータは、getParameter. で受け取っています。 困っているのは、 文字列中に、"Test":"あいう&えお" と半角の&が入っている場合、 getParameterだと、"あいう"までしか取り出せません。 何か対処方法はありませんか?

  • 文字列について

    昨日以下の質問をしました初心者ですが、 今自分で関数を作成しているのですが、文字列(丸数字)の文字化けにかなり苦しんでいます。 (※注※)これ以降(1)など()の中に数字を入れて記述しているものは実際のソースコード上では丸数字で記入してます。教えてgooでは丸数字が記述できないようでして… 関数の内容としては、(1)あ(2)い(3)う……このように丸数字で区切られている文字列を配列名を$dataとすると、$data[0]には「あ」、$data[1]には「い」、$data[2]には「う」が入るような関数を作成しています。 この丸数字の数は(10)まで対応させようと考えてます。 という質問をしましたが、この問題に関しては、 function bunkai($str1){ $data=explode('__SEPRATOR__',str_replace(Array("(1)","(2)","(3)","(4)","(5)","(6)","(7)","(8)","(9)","(10)"),'__SEPRATOR__',$str1)); array_shift($data); return $data; } と記述することのより解決しました。 しかし、昨日の質問を少し僕が間違えていたようで、実際には、$data[0]には「(1)あ」、$data[1]には「(2)い」、$data[2]には「(3)う」が入るような関数を作成したかったのです。で、試行錯誤しようにも方法が思いうかびませんでした。何か良い方法はないでしょうか?? ちなみに文字列は(1)あ(2)い(3)う……のように(1)から順番に始まるものもあれば(3)え(4)う…と(1)ではなく途中から始まるものもあります、なので、配列の順番を取ってきてそのまま丸数字に置き換えて挿入するという方法はダメです。 誰か文字列操作に詳しいお方、教えてもらえたらうれしいです。

    • ベストアンサー
    • PHP
  • 文字列がうまく取り出せない

    文字列がうまく取り出せないので教えて頂きたいのですが $str1 = "[2007年](10月)東京"; $str2 = "[2007年](10月)神奈川 (横浜)"; 上記2通りのデータがあり $str1の場合は、 Array ( [0] => 2007 [1] => 10月 [2] => 東京 ) $str2の場合は Array ( [0] => 2007 [1] => 10月 [2] => 神奈川 [3] => 横浜 ) と配列に格納したいのですが 思うようにできません・・ この場合どう記述すればよいのでしょうか??

    • ベストアンサー
    • PHP
  • 特定の文字列を除いた配列の作成マクロについて

    頭書の件、現在マクロで以下のようなことを行おうとしており悩んでおります。 皆様のお知恵を拝借いたしたく、お願いいたします。 エクセルのSheet1に以下のような形でデータが格納されております。 A行:文字列、B行:数字でそれぞれ60000個程度のデータ格納されております。 この中から、特定の文字列を含んだ列を全て削除したデータを配列に格納するマクロを作成したいと考えています。 「特定の文字列」は、例えば"山田", "佐藤", "田中"の3種類とします。 もし上述の文字列のいずれかを含んだデータが30000個あれば、削除後の30000個程度のデータを新しい配列に格納したいと思っています。 イメージ的には以下のような操作がしたいのですが、「If C(i, 1) <> List Then」では通らないので、この部分に該当するような操作をなにかしらの方法で表現できましたらご教授いただけると助かります。 Sub test() Dim C As Variant Dim D As Variant Dim i As Long Dim j As Long Dim List As Variant List = Array("山田", "佐藤", "田中") C = Worksheets("Sheet1").Range("A1", "B6000") For i = 1 To 60000 If C(i, 1) <> List Then D(j,1)=C(i,1) D(j,2)=C(i,2) j=j+1 Else End If Next End Sub お手数をおかけいたしますが、宜しくお願いいたします。

専門家に質問してみよう