Bom, estou estudando pra scwcd, e apesar de ter uma idéia, ainda nao está claro o que seria exatamente quando uma response já foi comitada.
Agradeço se alguem ajudar!
Bom, estou estudando pra scwcd, e apesar de ter uma idéia, ainda nao está claro o que seria exatamente quando uma response já foi comitada.
Agradeço se alguem ajudar!
Oi Gustavo, boa tarde.
Uma response comitada é quando você já abriu uma conversação com o "PrintWriter" de resposta. Dados como redirecionamento, gravação de cookies, etc, devem ser colocados no "Header" da resposta (ou seja, bem em cima). Quando você escreve um texto utilizando PrintWriter/JSPWriter, você automaticamente "pula" esta parte e é impossível voltar a trás.
Por exemplo:
... servlet(...) {
PrintWriter out = response.getWriter(); // inicia uma resposta
out.println("Alguma coisa"); // neste ponto, já não é mais possível redirecionar, gravar cookie, etc... etc... etc...
out.flush(); // envia de fato os dados
}
Ou seja, quando você obtém uma referência “PrintWriter” e manda escrever algo nela, é impossível efetuar tarefas de header (redirecionamento, dispatcher, cookie, session) no protocolo HTTP. Dica: Cuidado com isso no exame.
Abraço,
Obrigado pela ajuda, nos servlets quando se dá um dispatcher forward e após se envia algum texto p/ cliente, ele retorna ao servlet e executa o restante e não dá erro, apesar de não enviar ao cliente o texto.
Já no jsp, usando o forward pela standart action, se tu tentar mandar alguma coisa p/ cliente depois de ter dado o forward ele não retorna ao servlet gerado e tb nao dá erro (muito menos retorna ao cliente alguma coisa).
Como faço pra dar erro quando tento enviar alguma coisa depois de ter a resposta “comitada” ?
E aí blz… desculpe a demora…
Para causar um erro basta você fazer:
... servlet (...) {
try {
PrintWriter out = response.getWriter();
out.println("Isto será enviado através do protocolo HTTP e será escrito na página web");
out.flush(); // envia os dados
response.sendRedirect("http://algumsiteoupagina.com"); // aqui teremos um GRANDE PROBLEMA por que a
// resposta já foi comitada, impossível voltar a traś.
} catch ( Exception e ) {
e.printStackTrace();
} finally {
out.close();
}
}
Recomendo que estude o livro “Use a Cabeça! Servlets & JSP”. Nele você encontrará todas estas informações. Atenção: Algo deste tipo irá cair no exame SCWCD 5. Portanto, estude muito bem os objetivos.
Grande abraço,
Visite o Blog do Perereca: http://www.blogdoperereca.blogspot.com