Minggu, 26 Agustus 2012

Memampilkan JasperReport iReport PDF pada Web JSP Servlet (Pemrograman Java Server Page)

Setelah bisa Membuat Report JasperReport dengan iReport sehingga siap pakai. Kemudian sudah coba kita Menampilkan JasperReport iReport di Java Desktop dengan NetBeans. Maka kali ini coba kita gunakan Report tersebut untuk ditampilkan pada Aplikasi Java Berbasis Web atau JSP (Java Server Page) yang juga dibuat menggunakan NetBeans.

Pertama kita buat Project Baru dengan cara Klik File-New Project


Kemudian Pilih Java Web - Web Application. Klik Next




Kemudian masukkan nama Project, dan Pilih Direktory untuk menyimpan Project.  Klik Next




Kemudian pilih jenis server yang akan digunakan untuk menjalankan aplikasi misalnya GlassFish Server. Klik Next


Klik Finish :


Setelah Project Baru ditampilkan. Klik Kanan pada Project TreeView sebelah Kiri. Pada Nama Project Klik Kanan Pilih Properties.


Kemudian pada Jendela Project Properties, Pilih Libraries, Klik Add Library untuk Menambahkan Library yang Dibutuhkan.


Pada Dialog Add Library pilih MySQL JDBC Driver, kemudian klik Add Library.


Kemudian setelah kembali ke Jendela Project Properties, klik Add JAR/Folder. Pilih Folder tempar Instalasi iReport, misal di C:\Program Files\JasperSoft\iReport-4.7.0\ireport\modules\ext.


Kemudian Pilih Library JAR berikut : commons-beanutils.jar, commons-collections.jar, commons-digester.jar, commons-logging.jar, groovy-all.jar, iText.jar, japerreports.jar, spring.jar. Klik Open.


Sehingga Semua Library yang dibutuhkan tampak sudah diikutkan ke dalam Project. Sebagai catatan walaupun semua Library tersebut tidak secara langsung digunakan pada Kode Program, tetapi semua itu harus ada agar proses menampilkan JasperReport dalam Bentuk PDF pada Web JSP Berhasil.


Kemudian buatlah Halaman Servlet baru, dengan cara Pada Project TreeView, klik kanan Source Packages, pilih New - Servlet.




Kemudian beri nama Servlet, misalnya reportdokter


Klik Finish.


Setelah Halaman Servlet reportdokter.java digenerate, edit kode programnya menjadi seperti di bawah ini :

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.HashMap;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRResultSetDataSource;
import net.sf.jasperreports.engine.JasperRunManager;

/**
 * http://cariprogram.blogspot.com
 * nuramijaya@gmail.com
 * @author Amijaya
 */
@WebServlet(name = "reportdokter", urlPatterns = {"/reportdokter"})
public class reportdokter 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 {
//            /* TODO output your page here. You may use following sample code. */
//            out.println("<html>");
//            out.println("<head>");
//            out.println("<title>Servlet reportdokter</title>");          
//            out.println("</head>");
//            out.println("<body>");
//            out.println("<h1>Servlet reportdokter at " + request.getContextPath() + "</h1>");
//            out.println("</body>");
//            out.println("</html>");
//        } 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);
        try {
            Class.forName("com.mysql.jdbc.Driver");
            String url = "jdbc:mysql://localhost:3306/rumahsakit";
            Connection cn = DriverManager.getConnection (url, "root", "");
       
            String SQL = "SELECT     dokter.`nip` AS dokter_nip,     dokter.`nama` AS dokter_nama,     dokter.`alamat` AS dokter_alamat,     dokter.`tgllahir` AS dokter_tgllahir,    dokter.`tunjangan` AS dokter_tunjangan FROM `dokter` dokter";

            Statement st = cn.createStatement();
            ResultSet rs = st.executeQuery(SQL);
           
            response.setContentType("application/pdf");
            ServletOutputStream servletOutputStream = response.getOutputStream();
            InputStream reportStream = getServletConfig().getServletContext().getResourceAsStream("/report/reportdokter.jasper");
            //InputStream reportStream = getServletConfig().getServletContext().getResourceAsStream(application.getRealPath("/report/reportdokter.jasper"));          
           
            JRResultSetDataSource dataSource = new JRResultSetDataSource(rs); //resultSet);
            try {
                JasperRunManager.runReportToPdfStream(reportStream, servletOutputStream, new HashMap(), dataSource);
                servletOutputStream.flush();
                servletOutputStream.close();
            } catch (JRException e) {
                System.out.println(e.toString());
            }
         } catch (Exception e) {
            System.out.println(e.toString());          
         }
    }

    /**
     * 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>
}

Buatlah folder report pada project bagian Web Pages. Dengan cara pada Project Tree View, klik kanan Web Pages, pilih New Folder.


Kemudian kita masukkan dahulu file Report yang pernah kita buat, dalam ini adalah reportdokter.jasper dan reportdokter.jrxml. Copy kemudian masukkan ke project web pada Web Pages, folder report yang telah dibuat.


Pertama kita buat Project Baru dengan cara Klik File-New Project


Jalankan halaman Web Servlet nya dengan klik kanan pada bagian Source Packages - reportdokter.java. Pilih Run File.


Apabila keluar dialog berikut, klik OK.


Report yang telah dibuat berhasil ditampilkan dalam bentuk PDF.


Project selengkapnya dapat didownload disini. Setelah masuk Google Docs, klik File - Download.

Semoga bermanfaat.