servlet que é chamado da minha pagina JSP
package TCC.ctrl;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import TCC.modelo.Grafico;
public class ctrGrafico extends HttpServlet {
private static final long serialVersionUID = 1L;
public ctrGrafico() {
super();
}
protected void doGet(HttpServletRequest req,
HttpServletResponse resp) throws ServletException, IOException {
Executa(req,resp);
}
protected void doPost(HttpServletRequest req,
HttpServletResponse resp) throws ServletException, IOException {
Executa(req,resp);
}
private void Executa(HttpServletRequest req,
HttpServletResponse resp) throws ServletException, IOException {
if (req.getParameter("opcao").equals("geraGrafico")) {
List<String> lstParam = new ArrayList<String>();
lstParam.add(req.getParameter("tipRelat"));
lstParam.add(req.getParameter("codLoja"));
lstParam.add(req.getParameter("periodo"));
lstParam.add(req.getParameter("dataIni"));
lstParam.add(req.getParameter("dataFim"));
Grafico obj = new Grafico(lstParam);
if (obj.GeraGrafico()) {
req.getSession().setAttribute("grafico", obj.ImagemGrafico());
req.getRequestDispatcher("/respGrafico.jsp").forward(req, resp);
}
else {
req.getSession().setAttribute("erro", "Não há dados para geração desse relatório");
req.getRequestDispatcher("/respRelatorio.jsp").forward(req, resp);
}
}
else {
req.getSession().setAttribute("erro", "Erro inesperado");
req.getRequestDispatcher("/relatorio.jsp").forward(req, resp);
}
}
}
classe que gera o grafico
public boolean GeraGrafico() {
GraficoDAO obj = new GraficoDAO(_tipRelat, _param);
if (obj.GeraGrafico()) {
_titGrafico = obj.TituloGrafico();
_titEixoX = obj.TituloEixoX();
_titEixoY = obj.TituloEixoY();
_lstConteudo = obj.ListaConteudo();
_nomGraf = obj.NomeGrafico();
try {
_imagem = Geral.GeraGrafico(_titGrafico, _titEixoX,
_titEixoY, _lstConteudo,
ModeloGrafico.BARRA_VERTICAL_3D);
return true;
} catch (Exception ex) {
ex.printStackTrace();
}
}
return false;
}
classe chamada para gerar o grafico
public static BufferedImage GeraGrafico(String pTitGrafico,
String pTitEixoX,
String pTitEixoY,
List<GraficoItemTO> pLstValores,
ModeloGrafico pModeloGraf) throws Exception {
try {
int numLojas = pLstValores.size();
DefaultCategoryDataset ds = new DefaultCategoryDataset();
for (int ind = 0; ind < pLstValores.size(); ind ++) {
ds.addValue(pLstValores.get(ind).Valor1(),
pLstValores.get(ind).Valor2(),
pLstValores.get(ind).Valor3());
}
JFreeChart chart;
if (pModeloGraf == ModeloGrafico.BARRA_HORIZONTAL)
chart = ChartFactory.createBarChart(pTitGrafico, pTitEixoX, pTitEixoY, ds,
PlotOrientation.HORIZONTAL, true, false, false);
else if (pModeloGraf == ModeloGrafico.BARRA_HORIZONTAL_3D)
chart = ChartFactory.createBarChart3D(pTitGrafico, pTitEixoX, pTitEixoY, ds,
PlotOrientation.HORIZONTAL, true, false, false);
else if (pModeloGraf == ModeloGrafico.BARRA_VERTICAL)
chart = ChartFactory.createBarChart(pTitGrafico, pTitEixoX, pTitEixoY, ds,
PlotOrientation.VERTICAL, true, false, false);
else if (pModeloGraf == ModeloGrafico.BARRA_VERTICAL_3D)
chart = ChartFactory.createBarChart3D(pTitGrafico, pTitEixoX, pTitEixoY, ds,
PlotOrientation.VERTICAL, true, false, false);
else if (pModeloGraf == ModeloGrafico.LINHA_HORIZONTAL)
chart = ChartFactory.createLineChart(pTitGrafico, pTitEixoX, pTitEixoY, ds,
PlotOrientation.HORIZONTAL, true, false, false);
else if (pModeloGraf == ModeloGrafico.LINHA_HORIZONTAL_3D)
chart = ChartFactory.createLineChart3D(pTitGrafico, pTitEixoX, pTitEixoY, ds,
PlotOrientation.HORIZONTAL, true, false, false);
else if (pModeloGraf == ModeloGrafico.LINHA_VERTICAL)
chart = ChartFactory.createLineChart(pTitGrafico, pTitEixoX, pTitEixoY, ds,
PlotOrientation.VERTICAL, true, false, false);
else if (pModeloGraf == ModeloGrafico.LINHA_VERTICAL_3D)
chart = ChartFactory.createLineChart3D(pTitGrafico, pTitEixoX, pTitEixoY, ds,
PlotOrientation.VERTICAL, true, false, false);
else
return null;
chart.setBorderVisible(true);
chart.setBorderPaint(Color.black);
int tamFig = 100;
if (numLojas > 1 && numLojas <= 10)
tamFig = numLojas * 60;
else if (numLojas > 10)
tamFig = 600;
return chart.createBufferedImage(tamFig, 300);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
pagina JSP de resposta
<html>
<head>
<title>SGAD - Software de Gerenciamento e Apoio a Decisão</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href="./estilo.css" />
</head>
<body>
<div align="center">
<form name="form1" method="post" action="ctrRelatorio">
<input type="hidden" id="opcao" name="opcao" value="geraGrafico"/>
<!-- Tabela com 4 linhas e 2 colunas -->
<table width="750" height="610" border="0" cellpadding="0" cellspacing="0">
<!-- Linha onde fica a parte superior (logo) -->
<tr>
<td height="130" colspan="2" class="imagemLogo">
<h1> SGAD - Software de Gerenciamento e Apoio a Decisão </h1>
</td>
</tr>
<!-- Linha que pode mostrar informacoes do usuario -->
<tr height="20">
<td width="750" class="corMenu" colspan="2">
<p> Perfil do Usuário:
<%=request.getSession().getAttribute("perfil") %>
- Bem Vindo
<%=request.getSession().getAttribute("nomUser") %> </p>
</td>
</tr>
<tr height="450">
<!-- Coluna que recebe uma tabela onde fica o menu lateral -->
<td width="150" class="corMenu">
<table height="100%" width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td class="corMenuLatTopo" height="30"> </td>
</tr>
<tr>
<td class="corMenuLat">
<p style="margin-left: 5"> <a href="Principal?pag=Relatorio" class="menu"> Relátorios </a> </p>
</td>
</tr>
<tr>
<td class="corMenuLat">
<p style="margin-left: 5"> <a href="Principal?pag=Regras" class="menu"> Regras </a> </p>
</td>
</tr>
<tr>
<td class="itemSelecionado">
<p style="margin-left: 5"> <a href="Principal?pag=Pesquisa" class="menu"> Busca e Pesquisa </a> </p>
</td>
</tr>
<tr>
<td class="corMenuLat">
<p style="margin-left: 5"> <a href="Principal?pag=Logoff" class="menu"> Logoff </a> </p>
</td>
</tr>
<tr>
<td width="100%" height="100%"> </td>
</tr>
</table>
</td>
<!-- Coluna que recebe uma tabela onde fica o conteudo de cada pagina -->
<td width="600" align="right">
<table height="100%" border="0" align="center" cellpadding="1" cellspacing="1">
<tr> <td height="30"> </td> </tr>
<tr>
<td height="30" align="center">
<h2> <%= request.getSession().getAttribute("descricao").toString()%> </h2>
</td>
</tr>
<tr>
<td>
<img src="/prjGAD/GeraGrafico" />
</td>
</tr>
<tr>
<td height="100%" width="100%"> </td>
</tr>
</table>
</td>
</tr>
<!-- Linha final -->
<tr>
<td colspan="2" width="750" height="10" class="corMenu">
</td>
</tr>
</table>
</form>
</div>
</body>
</html>
e por fim a nova Servlet que eu criei
package TCC.ctrl;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class GeraGrafico extends HttpServlet {
private static final long serialVersionUID = 1L;
public GeraGrafico() {
super();
}
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
BufferedImage image = (BufferedImage) request.getSession().getAttribute("grafico");
ImageIO.write(image, "jpg", response.getOutputStream());
}
}
Espero que ajude, existem alguns ENUM e classes auxiliares que uso... mas se colocar todas vai ficar enorme aqui