Bom dia estou com uma servlet que executa um loop infinito para mostrar novas mensagens para o usuário, mas a mensagem so é mostrada quando eu de alguma forma saio do while
alguém ajuda por favor…
Porque é assim que um Servlet funciona. Ele só vai “retornar” quando tudo tiver sido feito ou o output stream tiver sido fechado. Sua implementação deve ser alterada, para o cliente ficar pedindo as conversas do bate papo. É um bate papo não é?
Esse pacote ainda não existe. O que existe é o "org.apache.catalina.websocket"
Websockets ainda não tem especificação (JSR-000356 em review), apenas soluções proprietárias.
Mesmo websockets sendo uma solução interessante, você não precisa usar necessariamente.
Você pode fazer algo do tipo:
Crie um servlet que busque no banco as mensagens que tem identificador maior que um id passado como parâmetro, por exemplo, se você tem as mensagens 6, 7, 8, 9 e 10 e você passar 6, eleretornanrá as mensagens 7, 8, 9 e 10. No lado do cliente, quando o usuário logar do bate papo, obtenha o id da última mensagem inserida na tabela. A partir dessa id, você vai fazer uma requisição ao servlet (usando Ajax), passando esse id como parâmetro. Essa requisição será feita usando um setInterval, para poder executá-la de tempos em tempos. A cada execução, você obtém as mensagens, escreve elas na tela e guarda o o maior id. Na próxima requisição, mande esse id como parâmetro para o servlet. Entendeu a ideia? Ela pode ser melhorada, mas o básico é assim.
Fiz com que a pagina de mostrar mensagens que esta dentro de um iframe ficasse atualizando e acessando o banco a cada 2 segundos ficou o chat meia boca mais vou pesquisar um meio mais profissional de fazer isso para melhorar meu chat.
tveronezi vou pesquisar sobre o “async call” pra ver si faço algo de boa qualidade…