Redirecionamento no Servlet

9 respostas
W

Pessoal trabalhava com o Resin e passei a utilizar o Tomcat. Tenho uma servlet que faz um forward para uma pagina .jsp. No Resin funcionava, agora no Tomcat está dando erro. O código está aí abaixo:

else if ( ret == 1 ){

RequestDispatcher nextView = null;

HttpSession sessao = req.getSession(true);

sessao.setAttribute(“quadro”,quadrosetorial);

sessao.setAttribute(“matricula”,matricula);

nextView = req.getRequestDispatcher("…/contra/opcoes.jsp");

nextView.forward(req,res);

}

Como disse no Resin funciona, no Tomcat não. O erro ocorre na última instrução, ou seja, no nextView.forward(req,res);
Alguém já viu alguma coisa assim e sabe onde pode estar o erro e como posso resolvê-lo?

9 Respostas

Bani

A sintaxe está certa, qual a mensagem de erro?
Talvez ele não tenha conseguido encontrar esse “…/contra/opcoes.jsp”, já tentou fazer por URL absoluta (começando na raiz da aplicação e com /)?

W

A mensagem é essa aí:

java.lang.NullPointerException
at LoginServlet.doPost(LoginServlet.java:59)

…linha 59 é exatamente aquela instrução que mencionei anteriormente.

Bani

Deu NullPointerException porque o objeto nextView está null, o que significa que a causa do erro está na linha de cima.
Ainda acho que o problema está na sua URL. Tente, apenas para testar, informar qualquer outra coisa que você tenha certeza que ele vai encontrar.

W

A url que, teoricamente, eu acessaria seria a seguinte:

http://localhost:8080/contra/opcoes.jsp

Porém não acesso, pois tenho que passar pelo login primeiro. Se eu tentar acessá-la direto, serei remetido para a página de login.
Tentei colocar essa url mas deu o seguinte erro:

type Status report

message /http:/localhost:8080/contra/opcoes.jsp

description The requested resource (/http:/localhost:8080/contra/opcoes.jsp) is not available.

Quando dou o submit no meu form e chama a servlet a url fica assim:
http://localhost:8080/contra/servlet/LoginServlet
Minha página opcoes.jsp está no nível de ‘contra’. Será que estou errando no níveis que devo voltar até chegar nela?

Bani

Contra é o nome da aplicação?
Se for, a URL absoluta é /opcoes.jsp

O problema foi justamente que a aplicação não consegue enxergar nada que está antes do contra/, então aquele seu…/contra/ ele não encontrou.

W

Funcionou colocando só /opcoes.jsp, a página aparece certinha porém o Internet Explores permanece carregando e no console do Tomcat agora está aparecendo a seguinte mensagem de erro. Você já viu esse erro?

java.lang.IllegalStateException: Current state = FLUSHED, new state = CODING_END

at java.nio.charset.CharsetEncoder.throwIllegalStateException(CharsetEnc
oder.java:933)

at java.nio.charset.CharsetEncoder.encode(CharsetEncoder.java:529)

at sun.nio.cs.StreamEncoder$CharsetSE.flushLeftoverChar(StreamEncoder.ja

va:356)

at sun.nio.cs.StreamEncoder$CharsetSE.implClose(StreamEncoder.java:413)

at sun.nio.cs.StreamEncoder.close(StreamEncoder.java:158)

at java.io.OutputStreamWriter.close(OutputStreamWriter.java:222)

at java.io.PrintWriter.close(PrintWriter.java:137)

at org.apache.catalina.connector.ResponseBase.finishResponse(ResponseBas

e.java:482)

at org.apache.catalina.connector.HttpResponseBase.finishResponse(HttpRes

ponseBase.java:236)

at org.apache.catalina.connector.http.HttpResponseImpl.finishResponse(Ht

tpResponseImpl.java:288)

at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcesso

r.java:1039)

at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.ja

va:1107)

at java.lang.Thread.run(Thread.java:536)
Bani

A causa desse erro basicamente é você iniciar uma “nova transmissão” quando você já mandou o header para o cliente.
Tem vários métodos que lançam essa exceção quando usados no momento errado, como por exemplo o sendRedirect.

W

E como posso resolver esse erro, você tem idéia, pode me ajudar?

Daniel_Quirino_Olive

Tente isso:

RequestDispatcher dispatcher;
dispatcher = getServletContext().getRequestDispatcher("/minha-pagina.jsp");
dispatcher.forward(request, response);
Criado 30 de setembro de 2003
Ultima resposta 1 de out. de 2003
Respostas 9
Participantes 3