【问题标题】:POST data as json to a Servlet not working in Phantomjs将数据作为 json 发布到在 Phantomjs 中不起作用的 Servlet
【发布时间】:2013-08-23 07:53:20
【问题描述】:

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

【问题讨论】:

    标签: javascript json servlets phantomjs velocity


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-30
      • 1970-01-01
      相关资源
      最近更新 更多