Ois de novo,
(Escrevi no dia 12, e depois no dia 14, mas n�o apareceu na lista, nem no
hist�rico.. Resolvi mandar de novo! Desculpem se aparecerem v�rios..)
muito obrigada a todos que responderam! :-)
bom, gostaria de comentar algumas das respostas:
Duas pessoas me falaram pra usar o dispatcher.forward ao inv�s do
sendRedirect. Mas eu preciso que o browser fique com a nova url, o que n�o
aconteceria com o dispatcher, certo? Como comentei, trabalho muito com
atualiza��o de dados, (atualiza��o que n�o � s� update, pode ser insert,
delete..), e o navegador estar com a nova url (que s� exibe uma tela) evita
que possam acontecer alguns probleminhas - e a necessidade do tratamento
deles - com o uso do back do browser, cache, etc, etc...
Tem outra forma de enviar o conte�do de outra url, mas fazendo o navegador
ficar com a nova?
O sendRedirect � um m�todo que n�o deveria ser usado? Eu deveria investir no
forward fazendo os tratamentos que hoje nao preciso por causa do
sendRedirect?
Outra pessoa questionou se eu t� passando os par�metros corretos para a
segunda chamada.. t� sim, com certeza, j� imprimi as chamadas pra ver se tem
algo diferente, e com certeza n�o tem! A mesma chamada �s vezes d� certo, �s
vezes n�o.. aleatoriamente!
E outras duas comentaram sobre o out.println, que n�o deve ser usado antes
do redirect. Eu olhei aqui e existia um out.println de uma vari�vel sim,
ap�s o sendRedirect, antes do return.
Mas esta vari�vel est� vazia quando ocorre o redirecionamento.
De qualquer forma s� farei o out.println() se estiver em opera��es que
precisarem.
Mas.. Isto poderia estar gerando erros de redirecionamento s� de vez em
quando, como tem acontecido comigo?
Bom, pra ilustrar um pouco o que tenho aqui vai um pseudo-c�digo:
service()...
{
switch operacao
{
case alteracaoForm..
{
alteracaoOk = alteraDados..
if(alteracaoOk)
sendRedirect(operacaoExibicaoTela);
else
htmlResultante= msgErro....
}
case exibicaoTela..
{
...
htmlResultante= exibeTela...
}
}
.. (finalizacoes do service)
out.println(htmlResultante);
return;
}
----- Original Message -----
From: Carolina Diniz [[EMAIL PROTECTED]]
To: '[EMAIL PROTECTED]'
Sent: Friday, March 08, 2002 11:26 AM
Subject: [java-list] sendRedirect() - por que �s vezes n�o funciona?
Ol�s,
Gostaria de saber se algu�m j� teve problemas com o sendRedirect..
O meu caso � o seguinte:
Tenho um servlet que executa v�rias a��es, dependendo da solicita��o. na
maior parte do tempo ele faz exibicao de telas (formularios) e atualiza��o
de dados.
O sendRedirect � usado neste servlet em alguns momentos, com um
redirecionamento para o pr�prio servlet, com o novo pedido.
Por exemplo: o servlet recebe um pedido de atualiza��o de dados, faz a
atualiza��o e redireciona para uma solicita��o de exibi��o de tela.
De vez em quando este redirecionamento n�o � completado, o c�digo da
primeira solicita��o acaba (como no exemplo citado, a atualiza��o dos dados
� completada), mas a segunda parte n�o � feita, a segunda solicita��o n�o
chega ao servlet, e o navegador exibe aquela p�gina de erro de 'a p�gina n�o
pode ser exibida..', o segundo perdido se perde totalmente, � terr�vel!!!
:-)
E pela minha an�lise feita at� agora isto � totalmente aleat�rio, fa�o um
pedido, recebo mensagem de erro, fa�o o mesmo pedido logo em seguida, a
p�gina retorna.. ou 2, 3 retornam, 1 n�o..
Estive guardando alguns dados sobre as requisi��es - como n�mero de acessos
no momento, navegador utilizado, etc.. - pra tentar achar alguma causa pra
este comportamento, mas at� agora n�o encontrei nada que desse alguma luz..
:-(
A �nica coisa que j� percebi � que dos v�rios lugares que uso o sendRedirect
� s� neste - atualiza��o de dados e exibi��o de tela - que este problema tem
acontecido. E o que tem de diferente neste caso? Bom, os dados que chegam na
primeira solicita��o (de atualiza��o de dados) costumam ser muitos.. e a
atualiza��o dos dados �s vezes demora um tempinho.. mas o estranho � que
quando acontece o erro a resposta vem at� relativamente r�pido,
diferentemente de quando a todo o processo � executado. lembrando aqui que
mesmo quando o erro acontece a atualiza��o � feita, a segunda requisi��o �
que se perde..
Bom.. fiquei pensando algumas coisas.. provavelmente nada a ver, chute
total... se for muita bobagem desculpem, mas... a� vai..
se pode ser porque no sendredirect � usado get, e o get �s vezes est� sendo
perdido.. pode ser? (detalhe: a segunda solicita��o n�o ultrapassa o limite
de caracteres do get..), tem como usar post pra esta minha necessidade?
alguma configura��o no servidor?
no servidor em quest�o o servlet est� rodando no jrun, com jre 1.3 da sun.
Isto est� acontecendo somente em uma empresa, o servlet roda em outras. O
acesso feito de uma m�quina l� de dentro n�o tem mostrando problema,
diferentemente de um acesso feito de fora..
alguma caracter�stica do cliente que est� acessando?
se o cliente est� acessando por tr�s de alguma estrutura que atrapalhe este
processo..
vi que isto j� aconteceu usando linha discada, mas tamb�m de dentro da uma
outra empresa, com estrutura linha dedicada, proxy, etc..
N�o sei mais o que testar.. Se algu�m tiver alguma pista, por favor me
indique!! Estou desesperada!!! :-)
N�o gostaria de deixar de usar o redirecionamento pois isto no meu caso (de
atualiza��o de dados) pode causar uma s�rie de probleminhas com back do
browser, cache, etc, etc..
Aguardo qq ajuda!!!
Obrigada,
Carol.
------------------------------ LISTA SOUJAVA ----------------------------
http://www.soujava.org.br - Sociedade de Usu�rios Java da Sucesu-SP
d�vidas mais comuns: http://www.soujava.org.br/faq.htm
regras da lista: http://www.soujava.org.br/regras.htm
historico: http://www.mail-archive.com/java-list%40soujava.org.br
para sair da lista: envie email para [EMAIL PROTECTED]
-------------------------------------------------------------------------