将数据作为json发布到不在Phantomjs中工作的Servlet

时间:2013-08-21 04:45:25

标签: javascript json servlets phantomjs velocity

我在这里面临一个非常奇怪的问题。我在我的机器上运行了一个servlet,它根据一些输入参数呈现我的网页。

现在,如果我尝试将我的数据作为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

此外,在我的代码中的其他地方......我正在对同一个servlet执行Ajax POST请求,它可以完美地满足所有这些请求。

有人会解释为什么我的servlet没有读取从Phantomjs传递的JSON参数吗?

1 个答案:

答案 0 :(得分:1)

Servlet处理简单请求,因此他们只知道如何解析(本机)HTTP参数,来自URL的GET参数或POST作为application/x-www-form-urlencoded发送的参数。较新版本的Servlet规范也可以读取multipart/form-data

但是在Servlet或HTTP规范中没有提到JSON。因此,您必须使用知道如何解析JSON并在Velocity上下文中使结果对象可用的库。