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]
-------------------------------------------------------------------------

Responder a