Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Como atualizar a pagina dinamicamente.

Boa tarde, estou com uma duvida sobre pagina em jsp, eu rodo uma aplicação que faz a instalação de softwares em massa, o problema que quando eu carrego a informação na pagina, Ex.: ip's para instalar o programa, o front end não sabe em que pé que esta a instalação, ou em que ip que esta rodando. eu gostaria de saber se existe uma forma de mostrar em qual ip esta rodando por ajax ou jquery? existe uma maneira da pagina, ir para o servlet e rodar o metodo e toda vez que passa pelo metodo envia uma informação para o jsp?

<form action="Servlet" method="post" name="java" onsubmit="ShowLoading()">
            <table style="width:100%">
                <td><p><p></p></p><input type="image" src="images/busca.png" width="30" height="30" alt="Submit" value="Pesquisar"/></td></tr>
            </table>
        </form>

o Servlet

protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        teste_contar mensagem = new teste_contar();

        String ip_impressoras = "192.168.0.1,192.168.0.2";

        String[] guardar = ip_impressoras.split(",");

        for (int i = 0; i < 3; i++) {                                               

            //response.setContentType("text/html");
            try {

                PrintWriter pw = response.getWriter();
                pw.println("<script type=\"text/javascript\">");
                pw.println("alert('teste posicao " + mensagem.ListarImpressora(guardar[i]) + "');");
                pw.println("</script>");
                System.out.println("esta no servlet : " + mensagem.ListarImpressora(guardar[i]));
                request.setAttribute("Listar", mensagem.ListarImpressora(guardar[i]));

            } catch (InterruptedException ex) {
                Logger.getLogger(teste_mensagem.class.getName()).log(Level.SEVERE, null, ex);
            } catch (SQLException ex) {
                Logger.getLogger(teste_mensagem.class.getName()).log(Level.SEVERE, null, ex);
            }

        }
        RequestDispatcher rd = request.getRequestDispatcher("teste.jsp");
        rd.include(request, response);
    }

e o methodo qualquer que passa em todo o ip

public class teste_contar {

    public String ListarImpressora(String ip) throws SQLException, InterruptedException {

        //String ok = "ok";
        Calendar cal = Calendar.getInstance();
        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
        //System.out.println( sdf.format(cal.getTime()) );

        String retorno = ip + " executou em : " + sdf.format(cal.getTime()) ;

        TimeUnit.SECONDS.sleep(2);

        return retorno;

    }
}
4 respostas
solução!

Jardel bom dia.

Consegue compartilhar sua aplicação via GitHub? Como o problema é mais complexo, tentarei baixar o projeto e executar na minha máquina, pra tentar ajudá-lo.

Att.

opa obrigado pela ajuda, segue o codigo : https://github.com/hcjardes/alura_forum

Jardel, primeiro vamos falar sobre a arquitetura da aplicação.

Se vc quer em tempo real monitorar o andamento da atividade, vc poderia fazer uma requisição Ajax de tempo em tempo (a cada X segundos) recuperando o status da instalação e atualizando a tela. Isto chama-se comumente de "polling".

Outra forma seria utilizar WebSocket, que é um protocolo que permite ao servidor enviar informações aos clientes (browsers) registrados. Esta seria uma solução melhor, porém vc poderia ficar com o polling pois é mais simples para implementar.

Para a parte de Ajax vc pode usar o ECMA6 (método fetch) ou mesmo o jQuery, e também a função JS timeout para poder executar a requisição periodicamente.

Dá uma olhada neste link, que tem um exemplo que creio lhe atenderá:

https://stackoverflow.com/questions/5052543/how-to-fire-ajax-request-periodically

Att.

opa obrigado eduardo, eu vou testar a ja posto o codigo.