Web・IT うんたらら

業務系とWeb系の狭間でIT業界を彷徨いながら備忘録と足跡を残していきます

レガシー開発環境における技術ノウハウの検索手法

あるいは、他の開発環境から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は、指定しなくても結果を返してくれる環境が多いため

うちの職場では、指定する習慣がなかったという。

 
このように、HTTPなど、共通のプロトコルを扱う際のトラブルを検索する際は
その分野でもっともメジャーな言語を例に検索することで、解決の糸口が見えるかも、という話でした。