Abrir nova aba do browser via código java

Pessoal,

Estou com a seguinte situação:
Tenho um webservice e um servlet que tem a função de gerar relatórios pdf (jasper).

Esse servlet é “acionado” a partir do webservice (tem um método que recebe os parâmetros do relatório). Eu consegui “acionar” o servlet repassando o parâmetro recebido pelo webservice utilizando httpClient

org.apache.http.client.HttpClient httpclient = new DefaultHttpClient();
		try {
			HttpPost httppost = new HttpPost("http://localhost/xxxx/ServletReport");
			List <NameValuePair> nvps = new ArrayList <NameValuePair>();
            nvps.add(new BasicNameValuePair("dataset", arquivo));
            httppost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
            httpclient.execute(httppost);
		} catch (Exception e) {
			System.out.println(e);
		} finally {
			// TODO: handle exception
		}

No meu servlet, no método service (chamado acima pelo httpClient.execute(httppost)) é o seguinte (ocultando detalhes não importantes)

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

	JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(reportData);
        	JasperPrint prt = JasperFillManager.fillReport(reportFile.getPath(), params, ds);
        	bytes = JasperExportManager.exportReportToPdf(prt);
        	
            if (bytes != null && bytes.length > 0) {
                response.setContentType("application/pdf");
                response.setContentLength(bytes.length);
                response.setHeader("Content-disposition", "attachment;filename=relatorio.pdf");   //Ja tentei sem essa linha e não adianta tbm
                ServletOutputStream ouputStream = response.getOutputStream();
                ouputStream.write(bytes, 0, bytes.length);
                ouputStream.flush();
                ouputStream.close();
            }
   }

O processamento é realizado sem problema, porém não exibe o relatório (pdf) em outra aba do browser, nem pede para salvar.
Esse mesmo servlet eu utilizo em uma aplicação Flex e essa chama esse servlet usando

var request:URLRequest = new URLRequest("/servlet/ServletReport");
navigateToURL(request, "_blank");

Nesse caso funciona. A diferença é que chamando do Flex (código acima) é aberta uma nova aba do browser em branco
com o endereço do servlet na barra de endereço…aí funciona perfeitamente…Mas “chamando” do webservice a aba não é
aberta…

Alguém saberia o que fazer nesse caso? Acho que só falta mesmo abrir outra aba com o endereço do servlet.
Para teste eu digitei manualmente no browser o endereço do servlet e funcionou…

quem controla onde a resposta será exibida é quem realiza a requisição.

No caso do Flex você passa “navigateToURL(request, “_blank”);”, a palavra “_blank” indica o target, ou seja, uma nova aba.

No caso de você acionar o servlet através de HttpClient, você deve ler a resposta e interpretar da maneira que precisa, pois quem vai estar com a resposta é o HttpClient, no caso você pode utilizar httppost.getBody… (não lembro o nome do método) para obter a resposta.

Meu HttpClient está dentro do WebService…
Eu consigo dali abrir uma nova aba/janela do navegador?

quem abriria uma nova aba/janela no navegador neste caso é quem fez a requisição ao WebService.

Nesse caso eu teria que retornar para o cliente (no caso a aplicação .Net) o pdf ou o byte[] para que o cliente faça a exibição?

sim, a resposta do seu WebService deveria ser o pdf, e o cliente que iria definir onde exibir (no caso, uma nova aba).

Certo,

Você saberia me dizer como faço para retornar o PDF, uma vez que não é o WS e sim o Servlet que constrói ele?

Guilherme,

Resolvi o problema retornando byte[] para o cliente.

Obrigado pelas respostas.