如何从GET请求中获取参数?

时间:2014-03-22 22:31:46

标签: java javascript jquery ajax servlets

我无法从请求中检索值。

的Servlet

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String location_id = request.getReader().readLine(); // <---- null
    location_id = request.getParameter("location_id"); // <--- null
    PrintWriter out = response.getWriter();
    out.write(this.get_events_json(location_id));
}

在客户端:

$.get("EventServe", {location_id : location_id}).done(function() {
    var events = JSON.parse(responseText);
    outer_this.events = events.map(function(event){
        var event = new Event(event.address, event.name, event.event_start, event.event_end)
        return event;
    });
    outer_this.events.map(function(event){outer_this.insert_event(event)});
});

我还试图直接传递它而不使用jQuery,只使用文字。

2 个答案:

答案 0 :(得分:1)

当您使用$.get('EventServe', {location_id: location_id}, ...)发出HTTP GET请求时,您将location_id的值作为查询字符串参数传递给指定的URL。基本上您要求:EventServe?location_id=4,其中4是location_id的值。

在服务器端,您可以通过getParameter(String name)访问查询字符串参数:

public void doGet(...) {
    String locationId = request.getParameter("location_id");
}

一些额外的说明:

  • 您应该移除对request.getReader().readLine()的通话。 (另外,readLine(byte[] b, int off, int len)不需要参数吗?)
  • 作为前一点的后续内容,通过BufferedReaderInputStream或类似内容手动读取请求是一种不好的(松散使用的)习惯,因为这样做可能会干扰在某些情况下使用getParameter(String name)
  

如果参数数据是在请求正文中发送的,例如HTTP POST请求,则直接通过getInputStream()getReader()读取正文会干扰此方法的执行。< / p>

Source for the above quote.

  • 您的客户端代码有一个错误,您可以在其中定义在Ajax调用完成时运行的函数。该函数应该以{{1​​}}为参数,因为jQuery将自动解析JSON响应:

    events
  • 戴上迂腐帽。)您的方法名称.done(function (events) { // Do things with the events }); 不符合Java惯例。考虑将其重命名为get_events_json或其他类似的内容。

答案 1 :(得分:-1)

Servlet Request Doc

只需查看getAttribute(String name)getParameter(String name)即可。

编辑:getParameter(String)用于POST请求,但您执行GET请求。请改用getAttribute(String)