1

ここで非常に奇妙な問題に直面しています。いくつかの入力パラメーターに基づいて Web ページをレンダリングするサーブレットをマシンで実行しています。

現在、データを JSON オブジェクトとして POST 要求タイプとして送信しようとすると、PhantomJS を使用したスクリーン キャプチャが機能しません。たとえば、私が試してみると:

クライアント側

var data = {"op": "get"};

page.open(address, 'POST', data, function (status) {
if (status !== 'success') {
    console.log('[ERROR] :: Unable to fetch the address - ' + address + ", with data - " + data);
    phantom.exit();
} else {
    page.render(output);        
}
console.log('processing...');
});

サーバ側

現在、サーバー側では、Apache Velocity View テンプレートを使用しているため、次のように get と post の両方を処理する単一のメソッドがあります。

public Template handleRequest(HttpServletRequest request, HttpServletResponse response,
        Context context){
   System.out.println(request.getParameter("op"));
   //Always null
}

ただし、phantomjs から次のようにデータを送信しようとすると:

var data = "op=get&..."
It works

また、コードの他の多くの場所で..同じサーブレットに対して Ajax POST リクエストを実行していますが、これらすべてのリクエストに対して完全に機能します。

私のサーブレットが Phantomjs から渡された JSON パラメータを読み取らない理由を誰か説明してくれませんか?

4

1 に答える 1

1

サーブレットは単純なリクエストを処理するため、HTTP パラメーター ( GETURL からのパラメーター、POSTまたはapplication/x-www-form-urlencoded. サーブレット仕様の新しいバージョンも読み取ることができますmultipart/form-data

しかし、JSON については、サーブレットまたは HTTP 仕様のいずれにも言及されていません。そのため、JSON を解析し、結果のオブジェクトを Velocity コンテキストで使用できるようにする方法を知っているライブラリを使用する必要があります。

于 2013-08-21T14:19:27.930 に答える