質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

Q&A

解決済

2回答

2390閲覧

PHPの配列をJavaのServletにHTTP-POSTしたいのですが、getParameterValuesで取得してもnullになってしまいます。

hakase

総合スコア107

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

0グッド

1クリップ

投稿2019/04/27 02:59

編集2019/04/27 12:18

こんにちは。
PHPの配列をJavaのServletにHTTP-POSTしたいのですが、getParameterValuesで取得してもnullになってしまい困っています。

htmlのformのcheckboxのような、多重データはうまく処理するようです。
困っています。アドバイスよろしくお願いします。

http://localhost/post.phpをたたきます。
中で、http://localhost:8080/app/testにHTTP-POSTしています。
しかしnullになって、"data is empty"が表示されます。
post.phpのurlをpostcheck.phpにすると、'a'が表示されます。

http://localhost/form.htmlをたたいた場合にはservletは
正しく、'data is a'を返します。

よろしくお願いします。

http://localhost:8080/app/test

Java

1import java.io.*; 2import javax.servlet.*; 3import javax.servlet.http.*; 4 5public class App extends HttpServlet { 6 public void doPost (HttpServletRequest req, HttpServletResponse res) 7 throws ServletException, IOException{ 8 PrintWriter out; 9 10 String[] data=req.getParameterValues("data"); 11 res.setContentType("text/plain; charset=utf-8"); 12 out = res.getWriter(); 13 String str="empty"; 14 if(data!=null){ 15 str=data[0]; 16 } 17 out.println("data is "+str); 18 } 19}

http://localhost/post.php

PHP

1$data=array('data'=>array('a','b')); 2$url='http://localhost:8080/app/test'; 3$ch = curl_init($url); 4curl_setopt($ch,CURLOPT_POST, TRUE); 5curl_setopt($ch,CURLOPT_POSTFIELDS,http_build_query($data)); 6curl_setopt($ch,CURLOPT_HEADER, 0); 7curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); 8curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, false); 9$result=curl_exec($ch); 10curl_close($ch); 11print $result; 12?>

$url='http://localhost/postcheck.php';

PHP

1<?php 2print $_REQUEST['data'][0]; 3?>

http://localhost/form.html

HTML

1<!DOCTYPE HTML> 2<html> 3<body> 4<form action="http://localhost:8080/app/test" method="post"> 5<p><input type="checkbox" name="data" value="a"/>ABC</p> 6<p><input type="checkbox" name="data" value="b"/>DEF</p> 7<p><input type="submit" value="送信"/></p> 8</form> 9</body> 10</html>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/04/27 06:08

具体的な動作確認手順をご提示ください。
hakase

2019/04/27 06:18

コメントありがとうございます。質問に追記しました。よろしくお願いします。
guest

回答2

0

ベストアンサー

http_build_query($data) はどんな文字列になりますか?
data[]=a&data[]=b
のように展開されますか?

また getParameter ではなく、配列を受け取るなら getParameterValues で受けてみてはどうでしょう。

投稿2019/04/27 10:09

NARH

総合スコア209

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hakase

2019/04/27 12:17

ありがとうございます。確認してみます。実際のソースコードではgetParameterValuesを使っていたのですが、投稿するときにミスってしまったみたいです。指摘ありがとうございました。編集しておきます。
hakase

2019/04/27 12:25

data%5B0%5D=a&data%5B1%5D=b なってました。
hakase

2019/04/27 12:27

javaの方は"data[0]","data[1]"を引数にしないといけないみたいですね。引数なしを試してみます。
hakase

2019/04/27 12:34

form.htmlをgetにしてみたら、?data=a&data=bとなってました。これならservletは認識するんですね。http_build_queryを使わずにStringを自分で合成することにします。ありがとうございましたー。
guest

0

array('data'=>array('a','b'));
を送ってdata[0]を指定してるならarray('a','b')なのでstringではないように思います。
Java側でログ出力してみては?

投稿2019/04/27 07:02

m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hakase

2019/04/27 08:35

ありがとうございます。javaのvar_dumpみたいな関数を探してみます。
m.ts10806

2019/04/27 08:37

画面出力ではなくログ出力ですよ。cURLで実行してるからにはJavaの実行状況を視認できるわけではないのでログファイルに出力してください。 log4jとかあると思います。
hakase

2019/04/27 08:54

ありがとうございます。ちなみに、out.println(req.getParameterValues("data"));したら、nullという文字列がレスポンスとして返ってました。
m.ts10806

2019/04/27 08:56

配列を渡している想定でstringで受け取っているところは謎ですけども
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問