Ajuda... Enviar arquivo do servidor para o cliente

Pessoal, gostaria de saber se tem como criar um “arquivo” na memória do servidor e enviar para o cliente.

tipo…

a partir de um objeto, pegar as informações colocar, nesse arquivo na memória e enviar para o cliente.

Bom… a pergunta acima consegui resolver seguinte forma:


response.setContentType("application/octet-stream");
		response.addHeader("Content-Disposition:", "attachment; filename=meuArquivo.txt");
		
		
		ServletOutputStream sos = response.getOutputStream();
		sos.println(conteudo); //conteudo será a string ou qualquer outra forma que você quer enviar!
		sos.flush();
		sos.close();

Só que…

Está gerando uma exceção depois que roda o código, mas o arquivo é enviado normalmente…

Servlet.service() for servlet jsp threw exception 13:23:26,905 [http-80-Processor25]    
 java.lang.IllegalStateException: getOutputStream() has already been called for this response
	at org.apache.catalina.connector.Response.getWriter(Response.java:596)
	at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:186)
	at javax.servlet.ServletResponseWrapper.getWriter(ServletResponseWrapper.java:111)
	at org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:124)
	at org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:117)
	at org.apache.jasper.runtime.JspWriterImpl.flush(JspWriterImpl.java:172)
	at java.io.PrintWriter.flush(PrintWriter.java:270)
	at org.apache.jasper.runtime.JspWriterImpl.flush(JspWriterImpl.java:174)
	at org.apache.struts.taglib.tiles.InsertTag$InsertHandler.doEndTag(InsertTag.java:885)
	at org.apache.struts.taglib.tiles.InsertTag.doEndTag(InsertTag.java:458)
.......

Alguém saberia porque está dando esta execção?!