<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="rep1" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
<background>
<band splitType="Stretch"/>
</background>
<title>
<band height="79" splitType="Stretch"/>
</title>
<pageHeader>
<band height="35" splitType="Stretch"/>
</pageHeader>
<columnHeader>
<band height="61" splitType="Stretch"/>
</columnHeader>
<detail>
<band height="125" splitType="Stretch">
<staticText>
<reportElement x="133" y="45" width="100" height="20"/>
<textElement/>
<text><![CDATA[test1234567]]></text>
</staticText>
</band>
</detail>
<columnFooter>
<band height="45" splitType="Stretch"/>
</columnFooter>
<pageFooter>
<band height="54" splitType="Stretch"/>
</pageFooter>
<summary>
<band height="42" splitType="Stretch"/>
</summary>
</jasperReport>
Простейшее веб приложение с использованием JasperReport
Мне необходимо создать веб приложение которое получив от скажем get запроса параметры, вставит эти параметры в необходимый темплейт.
Например, такие 3 запроса:
http://localhost:8080/testJP1/testjp1?name=Test1&surname=Test2
для него будет использован темплейт1. И соответствующие значение в темплейте заменятся на значения параметров запроса.
http://localhost:8080/testJP1/testjp1?name=Test1&surname=Test2&dir=home
для него будет использован темплейт2. И соответствующие значение в темплейте заменятся на значения параметров запроса.
Ну и еще вариант для запроса 3 соответственно темплейт3.
Что я делаю:
1) Создал в IReport jrxml, пока что без каких -то заменяемых мест.
Код:
В нетбеансе создал веб приложение и туда добавил все jar из jasperreport из папки dist, lib.
написал такой сервлет, но он падает на строке:
JasperReport js1 = JasperCompileManager.compileReport(context.getRealPath("/rep1.jrxml"));
проверял при помощи System.out.
Причем файл /rep1.jrxml лежит в корне приложения.
код сервлета:
Код:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.ars.testjp;
import java.io.*;
import java.lang.System;
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;
import javax.servlet.ServletContext;
import net.sf.jasperreports.engine.JREmptyDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
/**
*
* @author Ruslan
*/
public class testjp1 extends HttpServlet {
/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
try{
System.out.println("rrr");
ServletContext context = this.getServletConfig().getServletContext();
System.out.println("rrr2");
JasperReport js1 = JasperCompileManager.compileReport(context.getRealPath("/rep1.jrxml"));
System.out.println("rrr3");
}
catch (JRException ex) {
ex.printStackTrace();
}
} finally {
out.close();
}
}
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP <code>GET</code> method.
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Handles the HTTP <code>POST</code> method.
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Returns a short description of the servlet.
* @return a String containing servlet description
*/
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
}
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.ars.testjp;
import java.io.*;
import java.lang.System;
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;
import javax.servlet.ServletContext;
import net.sf.jasperreports.engine.JREmptyDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
/**
*
* @author Ruslan
*/
public class testjp1 extends HttpServlet {
/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
try{
System.out.println("rrr");
ServletContext context = this.getServletConfig().getServletContext();
System.out.println("rrr2");
JasperReport js1 = JasperCompileManager.compileReport(context.getRealPath("/rep1.jrxml"));
System.out.println("rrr3");
}
catch (JRException ex) {
ex.printStackTrace();
}
} finally {
out.close();
}
}
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP <code>GET</code> method.
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Handles the HTTP <code>POST</code> method.
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Returns a short description of the servlet.
* @return a String containing servlet description
*/
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
}
Также хотелось бы потом пример jrxml в котором потом можно будет сделать замену на необходимое значение из значения параметра get запроса.
З.Ы.
Я новичок в Java , так что пожалуйста поподробней.
Цитата: DanteJ
написал такой сервлет, но он падает на строке:
JasperReport js1 = JasperCompileManager.compileReport(context.getRealPath("/rep1.jrxml"));
JasperReport js1 = JasperCompileManager.compileReport(context.getRealPath("/rep1.jrxml"));
Что значит падает?
Какой ексепшен? (пожалуйста в лог студию)
Без лога (гадая по звездам) могу припустить что проблема в том, что вы запускаете приложение не на JDK, а на JRE. (Подробности потом если угадал)
По Джасперу - вот вам прелесные статьи на легкодоступном языке
http://voituk.kiev.ua/intro-jasper-reports/