You will see I have a problem, I must from a button in a jsp, send to call a report that I made in jasperreport above and be displayed in a pdf window to the user.
When you click on the button, you must send a signal to the servlet and servlet to decide if it shows the report to the user, then return the response to the jsp and show the user the report, but nevertheless, I can not make it show ... please help ... my code goes like this:
FORM AND JSP BUTTON:
<!-- este es mi form que se conecta con el servlet Direccion1-->
<form name="FormReporte" action="Direccion1" method="POST">
<p style="color:#ffffff">
Generar Reporte de Pacientes: <br><input type="submit" name="btnreportes" value="GENERAR" class="button1"/>
<!-- este de acá es mi boton que al darle envía la informacion al servlet-->
</p>
</form>
ON THE SERVLET: I practically only validate if a String value is returned, return an answer:
//si el boton se pulsa
} else if (request.getParameter("btnreportes")!=null){
String respuesta = request.getParameter("btnreportes");//obtiene el value del boton
request.setAttribute("resreporte",respuesta);//lo coloca en resreporte
rd=request.getRequestDispatcher("medpacientes.jsp");//manda la respuesta al jsp
rd.forward(request, response); //termina la instruccion de envio
}
Returned in the jsp (where the button was):
<%
if(request.getAttribute("resreporte")!=null)//si la respuesta del servlet es diferente de vacía
{
//creo mi reporte al usuario, pero es lo que no me deja, siempre me tira error http 500 server
File reportfile = new File(application.getRealPath("RPacientes.jasper"));
Map parameter = new HashMap();
byte[] bytes = JasperRunManager.runReportToPdf(reportfile.getPath(),parameter, con);
response.setContentType("application/pdf");
response.setContentLength(bytes.length);
ServletOutputStream outputstream = response.getOutputStream();
outputstream.write(bytes,0, bytes.length);
outputstream.flush();
outputstream.close();
}
%>
Please ask for your help if something is wrong, in advance Thank you!
Edited:
I have moved this to the servlet but application.getRealPath gives error.
File reportfile = new File(application.getRealPath("RPacientes.jasper"));
Map parameter = new HashMap();
byte[] bytes = JasperRunManager.runReportToPdf(reportfile.getPath(), parameter, con);
response.setContentType("application/pdf");
response.setContentLength(bytes.length);
ServletOutputStream outputstream = response.getOutputStream();
outputstream.write(bytes, 0, bytes.length);
outputstream.flush();
outputstream.close();
return;
I have the following libraries set:
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.jasperreports.engine.JRException;
import java.util.*;
import java.io.*;
import javax.servlet.ServletOutputStream;
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.view.JasperViewer;
import javax.servlet.ServletResponse;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import javax.swing.JInternalFrame;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.view.JasperViewer;
import javax.servlet.ServletContext;
APART I must clarify the order where I have located the files will see:
EDITED 3:
THIS PASSES WHEN I GIVE THE BUTTON TO GENERATE A REPORT, WHEN I HAVE THE CODE IN THE SERVLET