Как отделить параметры строки запроса от данных POST в сервлете Java - PullRequest
3 голосов
/ 20 января 2009

Когда вы получаете вызов doGet или doPost в сервлете, вы можете использовать getparameterxxx(), чтобы получить строку запроса или данные публикации в одном простом месте.
Если вызов был GET, вы получаете данные из строки url / query.
Если вызов был POST, вы получите все данные почты для вас.

За исключением случаев, когда получается, что вы не добавили атрибут 'action' в вызов формы. Если вы укажете полный или частично квалифицированный URL для параметра действия, все прекрасно работает, если вы этого не сделаете, браузер вызовет тот же URL, что и при отправке на предыдущей странице, и если там есть данные строки запроса вы получите это, а также данные POST, и вы не сможете отличить их друг от друга.

Или есть? Я просматриваю объект запроса, вижу, откуда поступают данные поста, я просто пытаюсь выяснить, откуда поступают данные GET, поэтому я могу стереть данные GET при вызове поста и стереть данные поста в вызов GET, прежде чем он сможет разобрать его, если это возможно.

Есть идеи, что это за безопасный способ?

И угадайте: вы никогда не пытались не помещать поле действия в тег формы. : -)

Ответы [ 4 ]

3 голосов
/ 20 января 2009

Вы правы, я никогда не пытался не помещать поле действия в тег формы ;-), и я бы не стал, потому что именно то, о чем вы говорите. (Кроме того, я думаю, что это не правильный HTML)

Я не знаю ни одного "чистого" способа различения параметров GET и POST, но вы можете получить доступ к необработанной строке запроса, используя метод getQueryString() HttpServletRequest, и вы можете получить доступ к необработанным данным POST, используя getInputStream() метод ServletRequest. (Я рассматриваю документы Tomcat API специально здесь, хотя я думаю, что они оба являются частью стандартного API сервлета) Тогда вы можете анализировать данные POST и GET отдельно, если хотите. Они будут (или должны обычно) форматироваться одинаково, т. Е.

name1=value1&name2=value2&...

хотя возможно с заменой амперсандов точкой с запятой (что технически вы можете сделать в HTTP / 1.1, я не знал этого до недавнего времени)

2 голосов
/ 20 января 2009

В HTML действие ТРЕБУЕТСЯ , поэтому я думаю, что поведение будет отличаться для разных клиентов.

1 голос
/ 20 января 2009

Методы HttpServletRequest.getParameterxxx () не различают параметры GET и POST. Если вам действительно необходимо различать их, вам нужно будет проанализировать их вручную, используя getQueryString () для параметров GET и getInputStream () / getReader () для данных POST.

0 голосов
/ 20 января 2009

Я написал бы ServletFilter и украсил бы объект запроса, чтобы немного очистить вещи (используя то, что Хилтон предложил выше). Это классический шаблон декоратора в фильтре перехвата .

...