Flush no Servlet

4 respostas
P

Pessoal,

Alguém sabe como posso enviar dados para o browser cliente enquanto faço um processamento em meu Servlet? Já tentei o PrintWriter.flush() e o Response.flushBuffer().

Aí vai a forma que eu estou utilizando.

protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		PrintWriter out = response.getWriter();
		if ("Iniciar".equals(request.getParameter("iniciar"))) {
			if (!this.continuar) {
				this.continuar = true;
			} else if (!this.executando) {
				out.println("Iniciando integração dos dados...");				
				out.flush();
				HttpSession sessao = request.getSession();
				Usuario usuarioLogado = (Usuario) sessao
						.getAttribute("usuarioLogado");
				String siglaUnidade = usuarioLogado.getUnidade().getSigla();
				realizarIntegracoes(siglaUnidade);
			}
		} else if ("Parar".equals(request.getParameter("parar"))) {
			this.continuar = false;
			out.println("Parando integração dos dados...");
			out.flush();
		}
	}


private void realizarIntegracoes(String siglaUnidade) {
		this.executando = true;
		while (this.continuar) {
			enviarNaoIntegrados(siglaUnidade);
			buscarNaoIntegrados(siglaUnidade);
			try {
				Thread.sleep(30000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		this.executando = false;
	}

Agradeço antecipadamente qualquer ajuda,
Petrus Bastos.

4 Respostas

bebad

ao mesmo tempo ??
vc quer treads ou servlet ?

no caso de servlet para enviar a informacao basta fazer

request.setAttirubute(“nomedoatributo”, valor);

RequestDispatcher view = request.getRequestDispatcher("./"+url);

view.forward(request, response);

att

P

Não cara, acho que eu não fui muito claro… deixa eu tentar explicar melhor.

Eu quero ir exibindo mensagens no browser do usuário ao longo do processamento do servlet.

C

Não analisei seu código, mas alguns browsers só começam a apresentar a resposta a partir do momento que o seu buffer interno é preenchido, portanto tente no início do processamento enviar um comentário do tipo:

for (int i = 0; i &lt 1000; i++) {
     out.println("<!-- Preenchendo o buffer do browser. -->");
}

Isso fará com que o browser comece a mostrar as mensagens (ServerPush).
O tamanho do buffer de cada browser eu não sei, faça uns testes aí e descubra um valor ideal para o i &lt 1000;

[]'s

P

Problema resolvido. Muito obrigado.

Criado 29 de janeiro de 2007
Ultima resposta 30 de jan. de 2007
Respostas 4
Participantes 3