【问题标题】:How to get parameters from GET request?如何从 GET 请求中获取参数?
【发布时间】:2014-03-22 22:31:45
【问题描述】:

我无法从请求中检索值。

小服务程序:

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 直接传递它,只使用文字。

【问题讨论】:

  • 由于我不完全确定在这种情况下如何将参数传递给服务器,您可以使用request.getParameterMap 检索所有参数并寻找您想要的参数,然后将代码重写为使用request.getParameter,因为你已经在使用了。
  • 这是一个 GET 请求,所以尝试打印出 request.getQueryString() 并查看参数是否是查询字符串的一部分。

标签: java javascript jquery ajax servlets


【解决方案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() 读取正文可能会干扰此方法的执行。

Source for the above quote.

  • 您的客户端代码在定义 Ajax 调用完成时要运行的函数时出错。该函数应该将events 作为参数,因为 jQuery 会自动解析 JSON 响应:

    .done(function (events) {
        // Do things with the events
    });
    
  • 戴上学究式帽子。)您的方法名称 get_events_json 不遵循 Java 约定。考虑将其重命名为 getEventsJson 或类似的名称。

【讨论】:

    【解决方案2】:

    Servlet Request Doc

    看看getAttribute(String name)getParameter(String name)

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

    【讨论】:

    • OP 已经在使用request.getParameter 但不知道参数的名称...
    • 哦抱歉,没看到
    • 而 getAttribute 在任何情况下都无济于事。
    • getParameter 适用于任何类型的请求:GET、POST、PUT、DELETE。 getAttribute 用于检索不是请求参数的请求属性...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-27
    • 1970-01-01
    • 2016-05-04
    • 1970-01-01
    • 2020-08-26
    • 2011-09-06
    • 1970-01-01
    相关资源
    最近更新 更多