help_outline
Ayudanos!
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

[Duda] Reporte con jasper report y java

  • 7 Respuestas
  • 2470 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado rush

  • *
  • Underc0der
  • Mensajes: 381
  • Actividad:
    3.33%
  • Reputación 7
    • Ver Perfil
  • Skype: iruxh1773
« en: Abril 14, 2015, 04:40:54 pm »
Que tal, estoy intentando hacer un reporte, pero no he tenido exito, soy nuevo usando esto de jasper report, intente usar itext pero se me hace demasiado complejo, con jasper report creo mi diseño y solo necesito desplegarlo ya sea desde un JSP o desde un servlet, para el despliegue lo tengo de la siguiente manera:


Mis archivos estan de la siguiente manera


y me manda el siguiente error al ejecutar:


No se a que se deba ese error, espero puedan ayudarme.

Saludos
« Última modificación: Mayo 11, 2015, 08:46:55 am por Expermicid »

Desconectado Gus Garsaky

  • *
  • Underc0der
  • Mensajes: 93
  • Actividad:
    0%
  • Reputación -1
    • Ver Perfil
  • Skype: gus.garsaky
« Respuesta #1 en: Abril 14, 2015, 04:53:01 pm »
Al parecer, el error es porque no le estás pasando la ruta correcta al constructor de File para que cargue el archivo. index.jsp está dentro de WebPages y tu carpeta reportes está dentro de WEB-INF.

Podrías hacer algo como:

Código: Java
  1. request.getContextPath()+"/WEB-INF/reportes/PDF.jasper"

La instrucción, request.getContextPath(), te devuelve el context path, y de ahí navegas hacia el destino.

Saludos.

Desconectado rush

  • *
  • Underc0der
  • Mensajes: 381
  • Actividad:
    3.33%
  • Reputación 7
    • Ver Perfil
  • Skype: iruxh1773
« Respuesta #2 en: Abril 14, 2015, 05:16:25 pm »
Tienes razon en que ese error es sobre la ruta, lo hice como lo pusiste y me manda lo siguiente:

Citar
Error:java.io.FileNotFoundException: \Jasper-Jasper-context-root\reports\PDF.jasper

lo que pasa es que no se encuentra en la carpeta Jasper-Jasper-Context-root, cuando se ejecuta mi servidor de esa manera cambian las cosas y no se por que, tambien intente hacerlo con

Citar
application.getRealPath("reports/PDF.jasper")

y a la ruta a la que apunta es esta:

Citar
C:\Users\rush\AppData\Roaming\JDeveloper\system11.1.2.1.38.60.81\o.j2ee\drs\Jasper\JasperWebApp.war\reports\PDF.jasper

pero esa tampoco es la ruta, me imagino que JasperWebApp.war es cuando hace el deploy de la aplicacion, la ruta original es esta:

Citar
C:\JDeveloper\mywork\Jasper\Jasper\public_html\WEB-INF\report\PDF.jasper

y aunque le pase la ruta original:

Citar
File ReportFile = new File ("C:/JDeveloper/mywork/Jasper/Jasper/public_html/WEB-INF/report/report/PDF.jasper");

me manda lo siguiente

« Última modificación: Abril 14, 2015, 05:20:37 pm por rush »

Desconectado Gus Garsaky

  • *
  • Underc0der
  • Mensajes: 93
  • Actividad:
    0%
  • Reputación -1
    • Ver Perfil
  • Skype: gus.garsaky
« Respuesta #3 en: Abril 14, 2015, 05:56:22 pm »
El problema es que no estás usando una arquitectura correcta en tu aplicación, no estás respetando el patrón MVC.

Es importante seguir las buenas prácticas de programación. Nunca se debe mezclar lógica de negocio con vistas, en aplicaciones web es muy recomendable aplicar el patrón MVC. En éste caso, la capa de acceso a datos (DAO) debe estar aislada del resto de capas (vista y controladores). Solo deben ser llamadas desde el contrador y éste no debe saber cómo funcionan los DAO.

Aplicando MVC, el ejemplo anterior quedaría así:

Código: Java
  1. @Override
  2. protectec void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  3.      response.setHeader("Content-Disposition", "inline; filename=\"application.pdf\"");
  4.      response.setContentType("application/pdf");
  5.  
  6.     String path ="C:\\Users\\Acer\\Documents\\NetBeansProjects\\tu_proyecto\\WebPages\\resources\\reports\\PDF.jrxml";
  7.  
  8.     try (Connection con = ConnectionUtils.getConnection()) {
  9.         JasperPrint jasperPrint = JasperUtils.buildJasperPrint(path, con);
  10.         // exportamos el archivo
  11.         JasperExportManager.exportReportToPdfStream(jasperPrint, response.getOutputStream());
  12.     } catch(JRException e1) {
  13.         e1.printStackTrace();
  14.     } catch(SQLException e2) {
  15.         e2.printStackTrace();
  16.     }
  17. }

Es conveniente que muevas tu folder reportes dentro de un folder resources dentro de WebPages.

Código: Java
  1. public class ConnectionUtils {
  2.     private static final String HOST = "jdbc:mysql://localhost:3306/tu_bbdd";
  3.     private static final String USER = "root";
  4.     private static final String PASS = "";
  5.     private static final String DRIVER = "com.mysql.jdbc.Driver";
  6.  
  7.     public static Connection getConnection() throws SQLException {
  8.         Class.forName(DRIVER);
  9.         return DriverManager.getConnection(HOST, USER, PASS);
  10.     }
  11. }

Código: Java
  1. public class JasperUtils {
  2.  
  3.     public static JasperPrint buildJasperPrint(String path, Connection con) {
  4.         JasperReport jr = JasperCompileManager.compileReport(path);
  5.         JasperPrint jasperPrint = JasperFillManager.fillReport(jr,  null, con);
  6.         return jasperPrint;
  7.     }
  8. }

Edit: Para acceder al PDF, solo basta:

Código: HTML5
  1. <a href="TuServlet">Ver PDF</a>

Importante es que debes de reemplazar "TuServlet" por la ruta de mapeo que le has especificado:

Código: Java
  1. @WebServlet(name="ReportServlet", urlPatterns={"/TuServlet"})
  2. public class ReportServlet extends HttpServlet { ... }


Comentas cómo te fue. Saludos.


PD: ¿Por qué movieron el tema a 'dudas generales'? ¡Éste tema es exclusivamente Java!
« Última modificación: Abril 14, 2015, 06:04:03 pm por Gus Garsaky »

Desconectado rush

  • *
  • Underc0der
  • Mensajes: 381
  • Actividad:
    3.33%
  • Reputación 7
    • Ver Perfil
  • Skype: iruxh1773
« Respuesta #4 en: Abril 16, 2015, 06:01:36 pm »
Bueno pues antes que nada gracias por responder y tratar de ayudarme, después de tanto intentar y buscar, pues entendí un poco el funcionamiento, al parecer el .JRXML es una plantilla o tu diseño de reporte, el cual necesita ser compilado, para obtener nuestro reporte compilado .JASPER, y para ser desplegado se utiliza jasperprint, al final solo use este fragmento de codigo en un servlet:

Código: [Seleccionar]
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setHeader("Content-Disposition", "inline; filename=\"application.pdf\"");
        response.setContentType("application/pdf");
                try{
                Connection conn = null;
                Class.forName("oracle.jdbc.driver.OracleDriver");
                        conn = DriverManager.getConnection("jdbc:oracle:thin:@XXXX", "XXXX", "XXXX");
                    File archivo = new File("C:/JDeveloper/mywork/jreports/jreports/public_html/reports/PDF.jasper");
                    JasperReport reporte = (JasperReport)JRLoader.loadObject(archivo);
                    JasperPrint jasperPrint = JasperFillManager.fillReport(reporte, null, conn);
                    JasperExportManager.exportReportToPdfStream(jasperPrint, response.getOutputStream());
                } catch (ClassNotFoundException e) {
                    System.out.println(e);
        } catch (SQLException e) {
            System.out.println(e);
        } catch (JRException e) {
            System.out.println(e);
        }
    }

y asi fue como se desplego mi diseño, y lo de la buena practica lo tomo en cuenta, solo que lo estaba haciendo asi por pruebas que hacia, pero creo que todo mi esfuerzo por entender el funcionamiento y utilizar jasper report pues no me servira por ahora ya que creo solo es un reporteador que imprime listas de datos, yo ando buscando algo para hacer un formato y pasarle parametros para llegar ese formato y mandarlo a PDF, entonces creo que optare por usar ITEXT :/

Gracias Gus Garsaky

Desconectado Gus Garsaky

  • *
  • Underc0der
  • Mensajes: 93
  • Actividad:
    0%
  • Reputación -1
    • Ver Perfil
  • Skype: gus.garsaky
« Respuesta #5 en: Abril 16, 2015, 07:10:02 pm »
Jasper tiene soporte para parámetros, queries y demás cosas; de hecho, Jasper usa internamente iTetx. Checka su documentación.


Saludos.

Desconectado ~ Yoya ~

  • *
  • Underc0der
  • Mensajes: 152
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • Email
« Respuesta #6 en: Abril 16, 2015, 10:46:37 pm »
y me manda el siguiente error al ejecutar:


No se a que se deba ese error, espero puedan ayudarme.

Saludos

El problema es que no estás usando una arquitectura correcta en tu aplicación, no estás respetando el patrón MVC.

Me gusta mucho que ayudas, pero ahí que ser objetivo compa.
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

Desconectado Gus Garsaky

  • *
  • Underc0der
  • Mensajes: 93
  • Actividad:
    0%
  • Reputación -1
    • Ver Perfil
  • Skype: gus.garsaky
« Respuesta #7 en: Abril 17, 2015, 01:30:31 am »
Sí,  tienes razón ~ Yoya ~, no venía al caso, pero igual es bueno que se lo haya comentado para que se vaya familiarizando con MVC (que seguro tocará más adelante Spring, JSF, Trapestry, entre otros).

Saludos.

PD: No sabía que estabas también por acá xD.

 

¿Te gustó el post? COMPARTILO!



[SOLUCIONADO] Duda con " "

Iniciado por Krisium

Respuestas: 1
Vistas: 1846
Último mensaje Junio 10, 2010, 10:50:35 am
por Xa0s
[SOLUCIONADO] [Taller PHP] Duda taller php 2 ejercicio 3

Iniciado por arthusu

Respuestas: 4
Vistas: 2322
Último mensaje Agosto 05, 2011, 02:00:42 am
por arthusu
[SOLUCIONADO] Duda con Windows 7 de 32 bits & 64 bits

Iniciado por andrestoushit

Respuestas: 2
Vistas: 1034
Último mensaje Marzo 15, 2016, 04:01:16 pm
por Lah-Vahn
[SOLUCIONADO] [Taller PHP] Duda taller php 1 ejercicio 4

Iniciado por arthusu

Respuestas: 2
Vistas: 1761
Último mensaje Julio 18, 2011, 07:19:33 pm
por arthusu
[SOLUCIONADO][Taller PHP] Duda taller php 2 ejercicio 2

Iniciado por Only

Respuestas: 3
Vistas: 2090
Último mensaje Agosto 05, 2011, 09:48:09 pm
por Only