Crear una Aplicación Web con Maven y JasperReports 3.0.0

El punto de partida sera el proyecto creado con soporte para WTP usando Maven y Eclipse.

Editar el archivo pom.xml para agregar las dependencias de JasperReports, le daremos soporte para mostrar los reportes en PDF:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <groupId>jrwebapp</groupId>
 <artifactId>jrwebapp</artifactId>
 <packaging>war</packaging>
 <version>1.0-SNAPSHOT</version>
 <name>jrwebapp Maven Webapp</name>
 <url>http://maven.apache.org</url>
 <dependencies>
 <dependency>
 <groupId>javax.servlet</groupId>
 <artifactId>servlet-api</artifactId>
 <version>2.2</version>
 <scope>provided</scope>
 <optional>true</optional>
 </dependency>
 <dependency>
 <groupId>commons-beanutils</groupId>
 <artifactId>commons-beanutils</artifactId>
 <version>1.7.0</version>
 <scope>compile</scope>
 </dependency>
 <dependency>
 <groupId>commons-collections</groupId>
 <artifactId>commons-collections</artifactId>
 <version>[2.1,)</version>
 <scope>compile</scope>
 </dependency>
 <dependency>
 <groupId>commons-digester</groupId>
 <artifactId>commons-digester</artifactId>
 <version>[1.7,)</version>
 <scope>compile</scope>
 </dependency>
 <dependency>
 <groupId>commons-logging</groupId>
 <artifactId>commons-logging</artifactId>
 <version>[1.0,)</version>
 <scope>compile</scope>
 </dependency>
 <dependency>
 <groupId>eclipse</groupId>
 <artifactId>jdtcore</artifactId>
 <version>[3.1.0,)</version>
 <scope>compile</scope>
 </dependency>
 <dependency>
 <groupId>com.lowagie</groupId>
 <artifactId>itext</artifactId>
 <version>2.1.0</version>
 <scope>compile</scope>
 </dependency>
 <dependency>
 <groupId>jasperreports</groupId>
 <artifactId>jasperreports</artifactId>
 <version>3.0.0</version>
 </dependency>
 <dependency>
 <groupId>junit</groupId>
 <artifactId>junit</artifactId>
 <version>3.8.1</version>
 <scope>test</scope>
 </dependency>
 </dependencies>
 <build>
 <finalName>jrwebapp</finalName>
 <pluginManagement>
 <plugins>
 <plugin>
 <groupId>org.apache.maven.plugins</groupId>
 <artifactId>maven-compiler-plugin</artifactId>
 <version>2.0.2</version>
 <configuration>
 <source>1.5</source>
 <target>1.5</target>
 </configuration>
 </plugin>
 <plugin>
 <groupId>org.apache.maven.plugins</groupId>
 <artifactId>maven-eclipse-plugin</artifactId>
 <version>2.4</version>
 <configuration>
 <downloadSources>false</downloadSources>
 <wtpversion>1.5</wtpversion>
 </configuration>
 </plugin>
 </plugins>
 </pluginManagement>
 </build>
</project>

Luegon desde el directorio donde se encuentra el archivo pom.xml del proyecto ingresar el comando:

mvn clean install

Cuando termine de actualizar el repositorio ingresar el comando:

mvn eclipse:clean eclipse:eclipse

Ahora le agregamos un servlet usando Eclipse:

Crear un Servlet con Eclipse

Crear un Servlet con Eclipse

Editamos el archivo JRServlet.java de modo que quede así:

package com.rab.ctrl;
import java.io.IOException;
 import java.io.PrintWriter;
import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
/**
 * Servlet implementation class JRServlet
 */
 public class JRServlet extends HttpServlet {
 private static final long serialVersionUID = 1L;
/**
 * @see HttpServlet#HttpServlet()
 */
 public JRServlet() {
 super();
 // TODO Auto-generated constructor stub
 }
/**
 * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse
 *      response)
 */
 protected void service(HttpServletRequest request,
 HttpServletResponse response) throws ServletException, IOException {
 response.setContentType("text/html");
 PrintWriter out = response.getWriter();
 out.println("<html><head><title>JasperReports!</title>"
 + "</head><body>Hello Servlet!</body></html>");
 out.close();
 }
/**
 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
 *      response)
 */
 protected void doGet(HttpServletRequest request,
 HttpServletResponse response) throws ServletException, IOException {
 // TODO Auto-generated method stub
 }
/**
 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
 *      response)
 */
 protected void doPost(HttpServletRequest request,
 HttpServletResponse response) throws ServletException, IOException {
 // TODO Auto-generated method stub
 }
}

El archivo web.xml debe quedar así:

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
 <display-name>JasperReports Web Application</display-name>
 <servlet>
 <servlet-name>JRServlet</servlet-name>
 <display-name>JRServlet</display-name>
 <description></description>
 <servlet-class>
 com.rab.ctrl.JRServlet</servlet-class>
 </servlet>
 <servlet-mapping>
 <servlet-name>JRServlet</servlet-name>
 <url-pattern>/JRServlet</url-pattern>
 </servlet-mapping>
 </web-app>

Finalmente editamos el archivo index.jsp el cual quedaría asi:

<html>
 <body>
 <h2>Hello World!</h2>
 <a href="/jrwebapp/JRServlet">/JRServlet</a>
 </body>
 </html>

Desplegamos en el servidor y el resultado sera el siguiente:

Hello Servlet

Hello Servlet

Ahora modificamos el método service de JRServlet así:

protected void service(HttpServletRequest request,
 HttpServletResponse response) throws ServletException, IOException {

 try {
 ServletContext sc = getServletConfig().getServletContext();
 String jrxmlPath = "/WEB-INF/classes/reports/PrimerReport.jrxml";
 String jasperPath = "/WEB-INF/classes/reports/PrimerReport.jasper";

 InputStream is = sc.getResourceAsStream(jasperPath);

 if (is == null) {
 String rp = sc.getRealPath(jrxmlPath);
 JasperCompileManager.compileReportToFile(rp);
 is = sc.getResourceAsStream(jasperPath);
 }

 ServletOutputStream sos = response.getOutputStream();
 JasperRunManager.runReportToPdfStream(is, sos, new HashMap(),
 new JREmptyDataSource());

 response.setContentType("application/pdf");
 sos.flush();
 sos.close();

 } catch (JRException e) {
 StringWriter sw = new StringWriter();
 PrintWriter pw = new PrintWriter(sw);
 e.printStackTrace(pw);
 response.setContentType("text/plain");
 response.getOutputStream().print(sw.toString());
 }
 }

Tenemos la siguiente estructura de aplicación web, en el directorio jrwebapp creamos la carpeta reports

Estructura del proyecto

Estructura del proyecto

En la carpeta reports creamos un archivo PrimerReport.jrxml con el siguiente contenido:

<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE jasperReport
 PUBLIC "-//JasperReports//DTD Report Design//EN"
 "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
 <jasperReport name="PrimerReport">
 <detail>
 <band height="20">
 <staticText>
 <reportElement x="20" y="0" width="200" height="20" />
 <text><![CDATA[El primer paso con JasperReports.]]></text>
 </staticText>
 </band>
 </detail>
 </jasperReport>

Finalmente, ejecutamos el proyecto y el resultado sería el siguiente:

Web PDF Report

Web PDF Report

Etiquetas: , , ,

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s


A %d blogueros les gusta esto: