[Resolvido]IllegalStateException - write e flush

8 respostas
Nykolas_Lima

No livro use a cabeca tem uma questão que pergunta quando é gerado a excpetion quando a resposta ja foi enviada.

A resposta é: write e flush.

No exame final tem uma questão parecida:

Given this fragment from a valid doGet() method:
12. OutputStream os = response.getOutputStream();
13. byte[] ba = {1,2,3};
14. os.write(ba);
15. RequestDispatcher rd = request.RequestDispatcher("my.jsp");
16. rd.forward(request, response);
Assuming that "my.jsp" adds the bytes 4, 5, and 6 to the response, what is the result?
A. 123
B. 456
C. 123456
D. 456123
E. An exception is thrown

Para mim isso dava exception pq ele usa o write.
Só que a resposta ele diz o seguinte:

-Option B: because os.flush() wasn?t called, the uncommitted output (123), is cleared, and forward is invoked without exception. If os.flush() had been called before forward, an IllegalStateException would have been thrown

O próprio livro se contradiz em suas páginas, alguém sabe se write causa ou não a excpetion?

qual ta certa?

valeu flw

8 Respostas

R

A questão é a seguinte:

When using a RequestDispatcher, the use of which methods can often lead to an IllegalStateException? (Choose all that apply.)

neste caso tanto utilizando write() como flush() pode gerar uma exception IllegalStateException

Mas não diz aonde pode lançar :slight_smile:

Abs,

Nykolas_Lima

então a resposta certa é E?

R

a correta é a B.

Só estaria errada se o write() fosse chamado após o forward()

B

Que dia vc vai marcar sua prova Frango?

R

Já marquei a minha hehe!

Nykolas_Lima

Quinta feira eu acho

Nykolas_Lima

valeu pelas repostas!

abraço

I

Frango:
No livro use a cabeca tem uma questão que pergunta quando é gerado a excpetion quando a resposta ja foi enviada.

A resposta é: write e flush.

No exame final tem uma questão parecida:

Given this fragment from a valid doGet() method:
12. OutputStream os = response.getOutputStream();
13. byte[] ba = {1,2,3};
14. os.write(ba);
15. RequestDispatcher rd = request.RequestDispatcher("my.jsp");
16. rd.forward(request, response);
Assuming that "my.jsp" adds the bytes 4, 5, and 6 to the response, what is the result?
A. 123
B. 456
C. 123456
D. 456123
E. An exception is thrown

Para mim isso dava exception pq ele usa o write.
Só que a resposta ele diz o seguinte:

-Option B: because os.flush() wasn?t called, the uncommitted output (123), is cleared, and forward is invoked without exception. If os.flush() had been called before forward, an IllegalStateException would have been thrown

O próprio livro se contradiz em suas páginas, alguém sabe se write causa ou não a excpetion?

qual ta certa?

valeu flw

Frango a diferença é que: Vc não pode escrever nada depois q enviar a resposta, ou seja, se vc chamou o forward e depois usou o write()

rd.forward(request,response); os.write(); //aqui iria gerar a IllegalState

com o flush() é um pouco diferente, na verdade é o contrario, vc não pode chamar o forward() depois de ter processado o buffer (flush()) no caso

os.flush(); rd.forward(request,response); //Aqui iria dar IllegalState

Criado 11 de janeiro de 2010
Ultima resposta 12 de jan. de 2010
Respostas 8
Participantes 4