Iniciando com Servlet == problemas

0 respostas
eliasn

Olá!!!
Estou com um problema, e não consigo resolver porque estou aprendendo servlets agora :oops:

To criando um aservlet que gera um grafico do JFreeChart do tipo Meter, mas ai quero passar alguns parâmetros, para criar mais de um gráfico. (Classe1)

Tenho outra servlet que vai colocar a imagem no html. Faco um for (de teste) para criar a iteração e imprimir elas.

Ocorre este erro:
java.lang.IllegalStateException: getWriter() has already been called for this response

O metodo da classe 1 esta separado dentro da classe.

A unica coisa que quero é conseguir colocar no html vários gráficos. Existe uma maneira mais fácil de fazer isso?

Classe1
public synchronized JFreeChart geraMeter(Double nValorDial, Double nRangeMin, Double nRangeMax, int nTipo, String sLink, HttpServletRequest request, HttpServletResponse response)
    {
        
        DefaultValueDataset oValorDataset = new DefaultValueDataset(nValorDial);
        
        MeterPlot oMeter = new MeterPlot(oValorDataset);
        
        Range range = new Range(nRangeMin, nRangeMax);
        
        oMeter.setRange(range);
        oMeter.setDialShape(DialShape.PIE);
        oMeter.setUnits("");
        oMeter.setValuePaint(Color.WHITE);
        oMeter.setDialBackgroundPaint(Color.WHITE);
        oMeter.setDialOutlinePaint(Color.LIGHT_GRAY);
        oMeter.setNeedlePaint(Color.GRAY);
        
        // se o Meter é do tipo 1 ele será quanto maior melhor, entãos seta a label e as cores necessárias
        if (nTipo == 1)
        {
            MeterInterval interval1 = new MeterInterval("Minimo", new Range(nRangeMin, 40.0), Color.GRAY, new BasicStroke(1), Color.GREEN);
            MeterInterval interval2 = new MeterInterval("Medio", new Range(40.0, 80.0), Color.GRAY, new BasicStroke(1), Color.YELLOW);
            MeterInterval interval3 = new MeterInterval("Maximo", new Range(80.0, nRangeMax), Color.GRAY, new BasicStroke(1), Color.RED);
            
            oMeter.addInterval(interval1);
            oMeter.addInterval(interval2);
            oMeter.addInterval(interval3);
        }
        else
        {
            MeterInterval interval1 = new MeterInterval("Minimo", new Range(80.0, nRangeMax), Color.GRAY, new BasicStroke(1), Color.RED);
            MeterInterval interval2 = new MeterInterval("Medio", new Range(40.0, 80.0), Color.GRAY, new BasicStroke(1), Color.YELLOW);
            MeterInterval interval3 = new MeterInterval("Maximo", new Range(nRangeMin, 40.0), Color.GRAY, new BasicStroke(1), Color.GREEN);
            
            oMeter.addInterval(interval1);
            oMeter.addInterval(interval2);
            oMeter.addInterval(interval3);
        }
        
        oMeter.setTickLabelsVisible(false);
        
        JFreeChart oJChart = new JFreeChart(oMeter);
        oJChart.removeLegend();
        oJChart.setBackgroundPaint(Color.WHITE);
        
        try
        {
            OutputStream out = response.getOutputStream();
            
            String type = request.getParameter("grafico");
            
            response.setContentType("image/png");
            
            ChartUtilities.writeChartAsPNG(out, oJChart, 100, 100);
            
            out.close();
            
        }
        catch (IOException ex)
        {
            ex.printStackTrace();
        }
        return oJChart;
    }
Classe2
protected synchronized void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException
    {
        PrintWriter out = new PrintWriter(response.getWriter());
        
        ArrayList oArray = new ArrayList();
        oArray.add(50.0);
        oArray.add(98.0);
        oArray.add(34.0);
        oArray.add(90.0);
        
        response.setContentType("text/html");
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Meters</title>");
        out.println("</head>");
        out.println("<body>");
        
        for (int i = 0; i &lt oArray.size(); i++)
        {
            Double nValorDial = (Double) oArray.get(i);
            Double nRangeMin = 0.0;
            Double nRangeMax = 100.0;
            int nTipo = 1;
            String sLink = "http://teste.com.br";
            
            wsqoGraficoMeter oMeter = new wsqoGraficoMeter();
            JFreeChart chart = oMeter.geraMeter(nValorDial, nRangeMin, nRangeMax, nTipo, sLink, request, response);
            
            try
            {
                String param = request.getParameter("grafico");
                out.println(&quot;<p>");
                out.println("<img  + chart + "\"   >");
                out.println("&nbsp;&nbsp; &nbsp;");
            }
            catch (Exception e)
            {
                System.err.println("*************** ERRO ***************");
                System.err.println(e.toString());
            }
        }
        
        out.println("&lt;/body&gt;");
        out.println("&lt;/html&gt;");
        out.flush();
        out.close();
    }

Abraços!

Criado 30 de novembro de 2006
Respostas 0
Participantes 1