No javascript eu fazia a seguinte chamada, onde a variavel r era um objeto XMLHttpRequest:
r.open("POST", "http://localhost/MeuServlet", true);
r.send("nome=tiago");
No servlet MeuServlet eu apenas pegava o parâmetro nome e o imprimia na saída padrão:
String nome = request.getParameter("nome");
System.out.println("nome enviado = " + nome);
A saída era sempre "nome enviado = null". Olhando no debugger de chamadas assíncronas do firebug dava pra ver que os parâmetros estavam sendo enviados com sucesso. O problemas estava mesmo na recepção. Eis então que achei um exemplo na internet com o que faltava para meu código javascript:
r.open("POST", "http://localhost/MeuServlet", true);
r.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;");
r.send("nome=tiago");
Colocando essa linha indicando o Content-Type no header da requisição a chamada por post passou a funcionar. Se alguém tiver uma explicação do porque disso será de grande ajuda.
Olá Thiago, você precisa informar ao servlet que tipo de dados ele está recebendo para que o mesmo possa tratá-los, é uma especificação do HTTP, desta forma ele irá tratar sua URL como um envio de formulário.
ResponderExcluirAssim como você deve indicar na resposta o tipo de conteúdo para que o navegador possa traduzi-lo, lembre-se que o XMLHttpRequest trata qualquer tipo de informação baseada em texto ASCII. Caso você esteja recebendo XML o tratamento será diferente de Text.
Uma dica quando for solicitar algum recurso de um servlet utilize encodeURI(URL_RECURSO) para que o seu container ou servlet controlador possa entender qual o recurso solicitado.
Espero que tenha ajudado!
Diego Charles
Graduando em Ciências da Computação