Relatórios jasperReports com Ajax

Galera,

Estou emitindo relatórios jasperReports com chamadas ajax. Percebi que o doGet() é executado duas vezes quando mando emitir o relatório. Identifiquei que o ajax está fazendo isso, mas não entendo o motivo. Gostaria de melhorar essa lógica para não prejudicar o desempenho do meu servidor.Por favor, me ajudem.

Chamadas ajax

function submitAjax(){
		htmlText = '<i18n:message key='paginaRelatorio.carregarRelatorio'/>';
		document.getElementById("info").innerHTML=htmlText;
		var url = "relatorio?relat=Produtividade&parametro=1";
		createXMLHttpRequest();
		xmlHttp.onreadystatechange = handleStateChange;
		xmlHttp.open("GET", url, true);
		xmlHttp.send(null);
}

function handleStateChange(){
	if(xmlHttp.readyState == 4){
		if(xmlHttp.status == 200){
			var size = xmlHttp.responseText.length;
			
			if(size>2){
		        document.forms[0].submit();
			}else {
		       alert('Não há dados'); 		            			
		    }
		}
	}
}

ServletRelatorio.java

public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException{

//SEMPRE PASSA DUAS VEZES POR AQUI

//declarações e outras particularidades
list = (List)AtividadeFuncionarioFactory.generateCollection();
relatorioXml = context.getRealPath(getNomeRelatorioTemplate());
parameters=parametrizar();

byte[] output = null;
JRExporter exporter = null;

if (list.size() > 0) {
      response.setContentType("application/pdf");
      output = Report.exportReportToPdf(Report.generate(list, relatorioXml, parameters));
      response.setHeader("Content-Disposition", "attachment; filename=relatorio" + extensao);
      response.setContentLength(output.length);
      ServletOutputStream ouputStream;
      ouputStream = response.getOutputStream();
      ouputStream.write(output);
      ouputStream.flush();
      ouputStream.close();
}

}

Obrigado

Pessoal,

Descobri que o doGet() é executado na chamada do ajax (linha 8 - ajax) e quando obtem-se a resposta do servidor mandando um submit(linha 17 - ajax). Agora estou batalhando para exibir o relatório passando apenas uma vez pelo doGet(), mas sem alterar a exibição da minha tela, ou seja, fazer o submit.

Se alguém tiver um exemplo, será bem vindo.

Valeu