レガシー開発環境における技術ノウハウの検索手法
あるいは、他の開発環境からJava ServletへPostした場合、パラメータが送信できない場合の対処法。
先日、とある業務でDelphiプログラムからJava Servletへパラメータを渡す処理を行う必要がありました。
送信先ポートにtomcatの待ち受けポートである8080を指定し、HTTPのPOSTメソッドにてリクエストを送信。ここまでは問題なかったのですが……。
Servlet側にて、パラメータが取得出来ません。
httpservletrequest.getparameter("パラメータ名")
上記メソッドでパラメータが取得できませんでした。
Map map = request.getParameterMap();
Iterator it = map.keySet().iterator();
while (it.hasNext()) {
String name = (String)it.next();
String val = (String)map.get(name);
for (int i = 0;i<val.length;i++) {
log(name + "=" + val[i] + "<br>");
}
}
こんな感じで、Postリクエストパラメータ全てを出力してみるも結果はnull
これはおかしい、と思い、検索を開始します。
しかし、ご存知の通りDelphiといえば巷では過去の言語なので、
「Delphi servlet post」とか「"Delphi to Servlert"」
などと検索しても一向にそれらしい記事は出てこないものです。
そこで
「他言語 servlet post」といった方向から検索をします。
ここでもヒントになりそうな記事は何件か見つかるものの、
未だ解決には至らず。
ふと閃いて
「php servlet post」と検索してみたところ……
一発で目的の記事にたどり着けました……。
ちなみに該当の記事はこちら
http://objectmix.com/php/486293-how-post-data-java-servlet.html
要するに、Request時のHTTPヘッダに記述が足りなかったという単純な問題でした。
具体的には以下のヘッダが必要。(CRLFは改行コードに読み替えてください)
Content-type: application/x-www-form-urlencoded (CRLF)
Content-length: (パラメータのバイト数)(CRLF)
(CRLF)
Content-Lengthは、指定しなくても結果を返してくれる環境が多いため
うちの職場では、指定する習慣がなかったという。