Ho rimesso mano al tutto ma ho sempre lo stesso problema.
Ora, nessuno reisce ad usare l'outputStream?
se si come?
il codice della mia jsp è questa (è una actionBean di struts richiamata da una jsp).
codice:
   Logger logger = Logger.getLogger(this.getClass().getName());
        SqlMapSingleton sqlMap = new SqlMapSingleton();
        CreaQuestionario que = (CreaQuestionario)form;
        int t_rep = Integer.parseInt(request.getParameter("r"));
        String rel1;
        String rel2;
        Map parametri;
        JasperPrint impress;
        ArrayList lista = null;
        DomandaReport dr = null;
        RispostaReport rr = null;
        List l_domande = null;
        DataSource ds =null;
        Context initCtx = null;
        Context envCtx =  null;
        javax.sql.DataSource datas = null;
        
        ServletOutputStream servletOutputStream = response.getOutputStream();
//code for jasperReports like initialising jasperPrint...
        
        
        
        ServletContext context = request.getSession().getServletContext();
        
//sempre per le lingue, in modo da nn avare report vuoti se nn trova il testo nella lingua in uso.
        List lingue = sqlMap.getSqlMap().queryForList("get_id_Lingua_Questionario_from_id_questionario",""+que.getId_questionario());
        if (! (lingue.contains(""+que.getId_lingua()))){
            String id_l = ""+lingue.get(0);
            que.setId_lingua(Integer.parseInt(id_l));
        }
        switch (t_rep){
            case 1:
                rel1 = context.getRealPath("report/QO_report_risposte_utente.jasper");
                parametri = new HashMap();
                initCtx = new InitialContext();
                envCtx = (Context) initCtx.lookup("java:comp/env");
                datas = (javax.sql.DataSource) envCtx.lookup("jdbc/QO");
                parametri.put("idLingua",""+que.getId_lingua());
                parametri.put("idQuestionario",""+que.getId_questionario());
                impress=JasperFillManager.fillReport(rel1, parametri, datas.getConnection());
                response.setContentType("application/pdf");
                response.setHeader("Content-Disposition","attachment; filename=Report_utenti.pdf");
                JasperExportManager.exportReportToPdfStream(impress,servletOutputStream);
                
                break;
            case 2:
                lista = new ArrayList();
                l_domande = sqlMap.getSqlMap().queryForList("get_Domande_Chiuse_from_Questionario",new ArgQuery(""+que.getId_questionario(),""+que.getId_lingua()));
                for (int i=0;i<l_domande.size();i++){
                    dr = (DomandaReport)l_domande.get(i);
                    ArrayList risp = new ArrayList();
                    List l_risp_tutte = sqlMap.getSqlMap().queryForList("get_Tutte_Risposte_Domanda",new ArgQuery(""+dr.getId_domanda(),""+que.getId_lingua()));
                    risp.addAll(l_risp_tutte);
                    List l_risp_date = sqlMap.getSqlMap().queryForList("get_Risposte_Date_Domanda",new ArgQuery(""+dr.getId_domanda(),""+que.getId_lingua()));
                    risp.addAll(l_risp_date);
                    dr.setRisposte(risp);
                    lista.add(dr);
                }
                rel1 = context.getRealPath("report/QO_report_percentuali.jasper");
                rel2 = context.getRealPath("report/QO_report_percentuali_subreport0.jasper");
                ds = new DataSource(lista);
                parametri = new HashMap();
                parametri.put("pathSubRel",rel2);
                impress = JasperFillManager.fillReport(rel1, parametri, ds);
                response.setContentType("application/pdf");
                response.setHeader("Content-Disposition","attachment; filename=Report_domande_chiuse.pdf");
                JasperExportManager.exportReportToPdfStream(impress,servletOutputStream);
                break;
            case 3:
                lista = new ArrayList();
                l_domande = sqlMap.getSqlMap().queryForList("get_Domande_Aperte_from_Questionario",new ArgQuery(""+que.getId_questionario(),""+que.getId_lingua()));
                for (int i=0;i<l_domande.size();i++){
                    dr = (DomandaReport)l_domande.get(i);
                    ArrayList risp = new ArrayList();
                    List l_risp_date = sqlMap.getSqlMap().queryForList("get_Risposte_Date_Domanda",new ArgQuery(""+dr.getId_domanda(),""+que.getId_lingua()));
                    risp.addAll(l_risp_date);
                    dr.setRisposte(risp);
                    lista.add(dr);
                }
                rel1 = context.getRealPath("report/QO_report_testo.jasper");
                rel2 = context.getRealPath("report/QO_report_testo_subreport0.jasper");
                ds = new DataSource(lista);
                parametri = new HashMap();
                parametri.put("pathSubRel",rel2);
                impress = JasperFillManager.fillReport(rel1, parametri, ds);
                response.setContentType("application/pdf");
                response.setHeader("Content-Disposition","attachment; filename=Report_domande_aperte.pdf");
                JasperExportManager.exportReportToPdfStream(impress,servletOutputStream);
                break;
            case 4:
                rel1 = context.getRealPath("report/QO_questionario_contatto.jasper");
                parametri = new HashMap();
                initCtx = new InitialContext();
                envCtx = (Context) initCtx.lookup("java:comp/env");
                datas = (javax.sql.DataSource) envCtx.lookup("jdbc/QO");
                parametri.put("idLingua",""+que.getId_lingua());
                parametri.put("idQuestionario",""+que.getId_questionario());
                impress=JasperFillManager.fillReport(rel1, parametri, datas.getConnection());
                response.setContentType("application/pdf");
                response.setHeader("Content-Disposition","attachment; filename=Report_utenti.pdf");
                JasperExportManager.exportReportToPdfStream(impress,servletOutputStream);
                break;
            default:
                return mapping.findForward(KO);
                
        }
        servletOutputStream.flush();
        servletOutputStream.close();
        return mapping.findForward(OK);
        
    }