Comitar a response?

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