I am not clear about your problem but the following code sample works
fine. Maybe the only important difference is that the perform method
returns null ?
public ActionForward perform(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
HttpSession session = request.getSession();
(...)
// a temporary output stream
ByteArrayOutputStream bout = new ByteArrayOutputStream();
// a writer to write String to output Stream.
Writer writer = new BufferedWriter(new OutputStreamWriter(bout));
writer.write(xmldoc); // xmldoc could be your "csv.dat" as String
writer.close();
byte[] content = bout.toByteArray();
// set the exact content length from our temp output stream
response.setContentLength(content.length);
// write the bytes content
response.getOutputStream().write(content);
// flush the stream
response.getOutputStream().flush();
return null;
}
Mrazovic, Maik wrote:
> Server generates a textfile. After generating server read the file and sends
> it to the client. Well, thats noe problem I thought, but a problem within
> Struts!
>
> While server wants to make this above within an Action there come en error:
>
> "2002-07-22 12:46:44 - Ctx( /impact ): IllegalStateException in: R( /impact
> + /createCSV2.do + null) Cannot forward as OutputStream or Writer has
> already been obtained"
>
>
> But if server makes this by a servlet it works! Isn�t that strange?
>
> The code:
>
> //userObject from session
> HttpSession session = request.getSession(true);
> de.tsystems.impact.model.User user =
> ( de.tsystems.impact.model.User )
> session.getAttribute(de.tsystems.impact.constants.Constants.USER_KEY);
>
> //debug-Info
> de.tsystems.impact.util.ParameterTest.printParameters(request);
>
> //App.Key: "sql.csv.generate"
> String stmt = "something...'";
>
> DBConnector con = DBConnector.getInstance();
> java.util.List listResult = con.executeDBStatement(stmt);
>
> java.util.Iterator iter = listResult.iterator();
>
> //Vector we fill with ImpactCSV-Objects
> java.util.Vector vectorWithCSVData = new java.util.Vector();
>
> while (iter.hasNext()) {
> java.util.List vec = (java.util.List) iter.next();
> vectorWithCSVData.add(new de.tsystems.impact.model.ImpactCSV(
> ((String) vec.get(2)), //land
> ((String) vec.get(0)), //bm
> ((String) vec.get(1)), //Version
> ((String) vec.get(4)), //Monat
> ((String) vec.get(3)), //Jahr
> ((String) vec.get(5)) //MengeLPP
> ));
> }
>
> //create empty CSV-File on server
> String file = getServletContext().getRealPath("") +
> java.io.File.separator + "web-inf" + java.io.File.separator
> + "csv.dat";
>
> //Buffersize for reading and sending data
> int buffer = 10 * 1024; //10 kb, increase if necessary
>
> //fill the "csv.dat" at "..\WEB-INF\csv.dat".
> FileOutputStream fos = new FileOutputStream(new File(file));
> PrintWriter pw = new PrintWriter(fos);
>
> for (int i = 0; i < vectorWithCSVData.size(); i++)
> {
> de.tsystems.impact.model.ImpactCSV impactSCV =
> ( de.tsystems.impact.model.ImpactCSV )
> vectorWithCSVData.get(i);
>
> pw.write(impactSCV.getLandnummer() + ";" +
> impactSCV.getBaumuster() + ";" + impactSCV.getVersion() + ";"
> + impactSCV.getMonat() + ";" + impactSCV.getJahr() +
> ";" + impactSCV.getWert() + "\n");
> }
>
> //clean up all ressources
> pw.flush();
> pw.close();
> fos.close();
>
> //Now sending this file to client
> try
> {
> //BufferedOutputStream out = new
> BufferedOutputStream(response.getOutputStream(), buffer);
> javax.servlet.ServletOutputStream out =
> response.getOutputStream();
>
> String contentType = getServletContext().getMimeType(file);
>
> response.setContentType(contentType);
>
> FileInputStream fis = new FileInputStream(file);
> byte[] buf = new byte [buffer];
> int bytesRead;
>
> while ((bytesRead = fis.read(buf)) != -1)
> {
> out.write(buf, 0, bytesRead);
> }
>
> out.flush();
> fis.close();
> }
> catch (Exception e)
> {
> e.printStackTrace();
> response.sendError(response.SC_NOT_FOUND, e.toString());
> }
>
> --
> To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
>
>
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>