1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Chat JSP - Atualizando a pagina ao receber novas msgs

Bom Dia!

Estou fazendo um chat um servlet para implantação em página WEB + módulo Desktop.

Ele utiliza uma thread única, apenas para fins de treinamento.

Quando crio os 2 modelos em Desktop, ele funciona perfeitamente.

Implementando ele de acordo com o código seguinte, o módulo da página envia normalmente as msgs para o chat de "atendimento", e ele escuta as msgs recebidas do chat atendimento, porém, preciso fazer com que as msgs recebidas sejam exibidas na página web, pois não sei como atualizar ela toda vez que o servlet verificar que uma nova mensagem foi recebida.

Segue abaixo o código do meu servlet


import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ChatCliente extends HttpServlet implements Runnable {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    Thread myThread = new Thread(this);
    private Socket socket;
    private ObjectInputStream ois;
    private ObjectOutputStream oos;
    private String div_chat = "";
    private String nome = "";
    private String email = "";
    private String pedido = "";
    private boolean envio = false;
    static String chat_input = "";
    private String atendimento = "0";

        @Override  
        public void service(HttpServletRequest request, HttpServletResponse response)  
                throws ServletException, IOException { 

           div_chat = request.getParameter("hist");
           atendimento = request.getParameter("atendimento");
           nome = request.getParameter("chat_nome");
           email = request.getParameter("chat_email");
           pedido = request.getParameter("chat_pedido");

           if(atendimento.equals("1")) {
               if(!envio) {
                   chat_input = String.valueOf(request.getParameter("chat_input"));
                   envio = true;
               }

               if(envio) {
                       try {
                           oos.writeObject(chat_input);                           
                           div_chat += "<font color=\"#00009C\"><b>Você:</b></font> " +chat_input+ "<br>";
                           envio = false;
                       } catch (IOException e) {
                           e.printStackTrace();
                       }
               }
           } else {
               div_chat = "<font color=\"#238E23\"><center>** Por gentileza, aguarde! Seu atendimento será iniciado **</center></font>";
           }


        atendimento = "1";
          request.setAttribute("historico", div_chat);
          request.setAttribute("iniciado", atendimento);

        request.getRequestDispatcher("chat_atendimento.jsp").forward(request,response); 

        }

        public void init() throws ServletException {
            if(atendimento.equals("0")) {
                myThread.setPriority(Thread.MIN_PRIORITY);
                myThread.start();
            }
        }

        @Override
        public void run() {
            int i = 0;

            try {
                socket = new Socket("localhost", 4444);
                oos = new ObjectOutputStream(socket.getOutputStream());
                ois = new ObjectInputStream(socket.getInputStream());

                while(true) {
                    if(i==0) {
                       div_chat = "<font color=\"#6B238E\"><b><center>** Atendimento Iniciado **</center></b></font><br>";
                       oos.writeObject(nome+"<br>"
                               + "<font color=\"#00009C\"><b>E-mail:</b></font> "+email+"<br>"
                                       + "<font color=\"#00009C\"><b>N° Pedido:</b></font> "+pedido+"<br>");
                    }

                    Object input = ois.readObject();                    
                    div_chat += " <font color=\"#238E23\"><b>Atendente:</b></font> " + (String)input + "<br>";
**//Se eu colocar um system.out.println(input); aqui, ele exibe no console toda vez que o Atendente envia uma msg ao cliente...preciso fazer com que ele atualize a pagina, para poder jogar o conteudo de div chat na pagina e o cliente poder visualizar as msgs.**
                    i++;                    
                }

                } catch (IOException e) {
                    e.printStackTrace();
                    if(i==0) {
                        div_chat = "<font color=\"#238E23\"><center>** Por gentileza, aguarde! Seu atendimento será iniciado **</center></font>";
                        run();
                    } else {
                        div_chat = "<font color=\"#FF0000\"><center>** Falha de conexão **</center></font>";
                        run();
                    }

                } catch (ClassNotFoundException e) {
                    e.printStackTrace();
                    div_chat = "<font color=\"#FF0000\"><center>** Aguarde **</center></font>";
                }            
            }

}
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags java jsp threads ou faça a sua própria pergunta.