1

我在这里面临非常奇怪的问题。我的机器上运行了一个 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 参数吗?

4

1 回答 1

1

Servlet 处理简单的请求,因此它们只知道如何解析(本机)HTTP 参数,无论是GET来自 URL 的POST参数,还是以application/x-www-form-urlencoded. 较新版本的 Servlet 规范也可以阅读multipart/form-data.

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

于 2013-08-21T14:19:27.930 回答