Почему getAttribute () в HttpServletRequest работает для метода GET, но не для метода POST? - PullRequest
0 голосов
/ 01 сентября 2011

Я отлаживал проблему AJAX на стороне клиента, которая делала запрос к сервлету. Но ошибка оказалась на стороне сервера. Вы можете обратиться к моему первоначальному вопросу здесь . Из обсуждения с более опытными людьми я узнал, что сервлет использует метод request.getAttribute () для получения параметров из запроса вместо getParameter (). Поэтому я решил открыть новый вопрос, чтобы очистить мои сомнения.

Теперь мой вопрос: если я использую метод GET для передачи параметров от клиента к серверу, getAttribute () в сервлете работает нормально, и я могу получить значения параметров. Но когда я использую метод POST, getAttribute () возвращает null. Почему это работает для GET, а не для POST?

Ответы [ 2 ]

3 голосов
/ 01 сентября 2011

Вы всегда должны использовать getParameter, когда атрибут приходит из метода GET или POST. И используйте getAttribute, когда запрос перенаправляется из другого сервлета / jsp. Такие как:

ServletA:
request.setAttribute("test","value")
request.getRequestDispatcher("/ServletB").forward(request, response)


ServletB:
request.getAttribute("test") <-- you can get test attribute by using getAttribute
0 голосов
/ 01 сентября 2011

Теперь мой вопрос: если я использую метод GET для передачи параметров от клиента к серверу, getAttribute () в сервлете работает нормально, и я могу получить значения параметров. Но когда я использую метод POST, getAttribute () возвращает null. Почему это работает для GET, а не для POST?

Полная чушь. Вы, очевидно, работаете над существующим проектом, в котором есть много других существующих сервлетов и фильтров. Мои центы, что есть еще один фильтр в цепочке запрос-ответ, который отображает параметры запроса для запроса атрибутов по какой-то неочевидной причине.

Пожалуйста, создайте пустой проект игровой площадки и создайте сервлет игровой площадки, чтобы лучше познакомиться с сервлетами без всего этого шума в существующих проектах.

Смотри также:

...