2014-03-22 3 views
2

Я не могу получить значения из запроса.Как получить параметры из запроса GET?

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, используя только литералы.

+0

Поскольку я не совсем уверен, как параметры передаются на сервер в этом случае, вы можете использовать [ 'request.getParameterMap'] (http://docs.oracle.com/javaee/7/ апи/javax/сервлет/ServletRequest.html # getParameterMap()), чтобы получить все параметры и искать нужный параметр, а затем переписать код, чтобы использовать 'request.getParameter', как вы уже используете. –

+0

Это запрос GET, поэтому попробуйте распечатать request.getQueryString() и посмотрите, является ли этот параметр частью строки запроса. –

ответ

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))
  • В качестве продолжения предыдущей точки, вручную считывая запрос с помощью BufferedReader, InputStream, или что-то подобное плохое (привычное) привычка, Это может помешать 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 или что-то в этом роде.

-1

Servlet Request Doc

Просто посмотрите на getAttribute(String name) или getParameter(String name).

Редактировать: getParameter(String) для запроса POST, но вы выполняете запрос GET. Используйте getAttribute(String) вместо

+0

OP уже использует 'request.getParameter', но не знает имя параметра ... –

+0

О, извините, не видел, что – Ennosigaeon

+0

И getAttribute ни в коем случае не поможет. –

Смежные вопросы