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
Es conveniente que muevas tu folder reportes dentro de un folder resources dentro de WebPages.
Código: java
Código: java
Edit: Para acceder al PDF, solo basta:
Código: html5
Importante es que debes de reemplazar "TuServlet" por la ruta de mapeo que le has especificado:
Código: java
Comentas cómo te fue. Saludos.
PD: ¿Por qué movieron el tema a 'dudas generales'? ¡Éste tema es exclusivamente Java!
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í:
@Override
protectec void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setHeader("Content-Disposition", "inline; filename=\"application.pdf\"");
response.setContentType("application/pdf");
String path ="C:\\Users\\Acer\\Documents\\NetBeansProjects\\tu_proyecto\\WebPages\\resources\\reports\\PDF.jrxml";
try (Connection con = ConnectionUtils.getConnection()) {
JasperPrint jasperPrint = JasperUtils.buildJasperPrint(path, con);
// exportamos el archivo
JasperExportManager.exportReportToPdfStream(jasperPrint, response.getOutputStream());
} catch(JRException e1) {
e1.printStackTrace();
} catch(SQLException e2) {
e2.printStackTrace();
}
}Es conveniente que muevas tu folder reportes dentro de un folder resources dentro de WebPages.
public class ConnectionUtils {
private static final String HOST = "jdbc:mysql://localhost:3306/tu_bbdd";
private static final String USER = "root";
private static final String PASS = "";
private static final String DRIVER = "com.mysql.jdbc.Driver";
public static Connection getConnection() throws SQLException {
Class.forName(DRIVER);
return DriverManager.getConnection(HOST, USER, PASS);
}
}public class JasperUtils {
public static JasperPrint buildJasperPrint(String path, Connection con) {
JasperReport jr = JasperCompileManager.compileReport(path);
JasperPrint jasperPrint = JasperFillManager.fillReport(jr, null, con);
return jasperPrint;
}
}Edit: Para acceder al PDF, solo basta:
<a href="TuServlet">Ver PDF</a>Importante es que debes de reemplazar "TuServlet" por la ruta de mapeo que le has especificado:
@WebServlet(name="ReportServlet", urlPatterns={"/TuServlet"})
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!

























