Pergunta

Quando você receber uma chamada doGet ou doPost em um servlet você pode usar getparameterxxx() para obter tanto a string de consulta ou o pós dados em um lugar fácil.
Se a chamada foi um GET, você obtém dados do url / query string.
Se a chamada foi um POST, você obtém os dados post todos analisados ??para você.

Com exceção como se vê, se você não colocar um atributo 'ação' na sua chamada formulário. Se você especificar um url totalmente qualificado ou parcialmente qualificado para o param ação tudo funciona muito bem, se você não fizer isso, o navegador irá chamar o mesmo url como fez na página anterior apresentar, e se não passa a ser de consulta dados de cadeia lá , você vai ter que, assim como dados POST, e não há nenhuma maneira de distingui-los.

Ou há? Eu estou olhando através do objeto do pedido, não vejo onde os dados pós vem, eu só estou tentando descobrir onde os dados GET vem, para que eu possa apagar os dados GET em uma chamada post e apagar os dados mensagem em uma chamada GET antes de ele analisa-lo, se possível.

Qualquer idéia de que a maneira segura de fazer isso é?

E deixe-me adivinhar: você nunca tentou não colocar um campo de ação em uma tag form. : -)

Foi útil?

Solução

Em HTML, a ação é NECESSÁRIO , então eu acho que o comportamento irá variar entre os clientes.

Outras dicas

Você tem razão, eu nunca tentei não colocar um campo de ação em uma tag forma ;-) e eu não iria, por causa exatamente o que você está falando. (Além disso, eu acho que não é HTML válido)

Eu não sei de nenhuma maneira "limpa" para distinguir entre GET e POST parâmetros, mas você pode acessar a string de consulta raw usando o método getQueryString() de HttpServletRequest, e você pode acessar os dados POST raw usando o método getInputStream() de ServletRequest. (Eu estou olhando para a documentação da API do Tomcat especificamente aqui, embora eu acho que esses são tanto parte da API do Servlet standard) Em seguida, você pode analisar os dados POST e obter dados separadamente, se quiser. Eles vão (ou deveriam normalmente) tanto ser formatados da mesma forma, ou seja.

name1=value1&name2=value2&...

embora possivelmente com as ampersands substituído por ponto e vírgula (que você pode tecnicamente fazer em HTTP / 1.1, eu não sabia que até recentemente)

Os métodos HttpServletRequest.getParameterxxx () não distinguem entre parâmetros GET e POST. Se você realmente precisa de distinguir entre eles, você precisa analisá-los manualmente usando getQueryString () para os parâmetros GET e getInputStream () / getReader () para os dados POST.

Gostaria de escrever uma ServletFilter e decorar o objeto pedido para limpar as coisas um pouco (usando o Hilton sugerido acima). Este é o padrão decorador clássico em um filtro de intercepção .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top