title: Display Excel sheet in the Browser?
body: <p>I need to <strong>display</strong> the newly <strong>generated excel</strong> (from tables using Apache POI) <strong>in a web browser</strong> (whatever it is, Firefox, Opera or IE). I've created the JSP file with </p>
  
  <blockquote>
    <p><code>contentType="application/vnd.ms-excel"</code></p>
  </blockquote>
  
  <p>But I'm not getting it. </p>
  
  <p>Here's my code snippet :</p>
  
  <pre><code>&lt;%@page session="true" contentType="application/vnd.ms-excel" pageEncoding="UTF-8"%&gt;
  &lt;%@page import="org.apache.poi.ss.usermodel.CellStyle"%&gt;
  &lt;%@page import="java.sql.DriverManager"%&gt;
  &lt;%@page import="java.sql.ResultSet"%&gt;
  &lt;%@page import="java.sql.Statement"%&gt;
  &lt;%@page import="java.sql.Connection"%&gt;
  &lt;%@page import="org.apache.poi.ss.usermodel.CreationHelper"%&gt;
  &lt;%@page import="org.apache.poi.hssf.usermodel.HSSFCell"%&gt;
  &lt;%@page import="org.apache.poi.hssf.usermodel.HSSFRow"%&gt;
  &lt;%@page import="org.apache.poi.hssf.usermodel.HSSFWorkbook"%&gt;
  &lt;%@page import="org.apache.poi.hssf.usermodel.HSSFSheet"%&gt;
  
  &lt;html&gt;
      &lt;head&gt;
          &lt;%!
              int r=0;
  
              HSSFWorkbook book;
              HSSFSheet sheet;
              HSSFRow row;
  
              CreationHelper createHelper = book.getCreationHelper();
  
              Connection conn;
              Statement stmt;
              ResultSet rs;
          %&gt;
          &lt;title&gt;Report&lt;/title&gt;
          &lt;%
              book = new HSSFWorkbook();
              sheet = book.createSheet("Report");
          %&gt;
      &lt;/head&gt;
      &lt;body&gt;
          &lt;%
              try     {
  
                      // Header of the Excel File
                  row = sheet.createRow(r);
  
                  row.createCell(0).setCellValue("Visit ID");
                  row.createCell(1).setCellValue("Carrier Name");
                  row.createCell(2).setCellValue("Phone Number");
                  row.createCell(3).setCellValue("Patient Name");
                  row.createCell(4).setCellValue("Subscriber ID");
                  row.createCell(5).setCellValue("Subscriber Name");
                  row.createCell(6).setCellValue("Chart Number");
                  row.createCell(7).setCellValue("Date Of Birth");
                  row.createCell(8).setCellValue("Subscriber Employer");
                  row.createCell(9).setCellValue("Service Date");
                  row.createCell(10).setCellValue("Provider Name");
                  row.createCell(11).setCellValue("CPT Code");
                  row.createCell(12).setCellValue("Aging Date");
                  row.createCell(13).setCellValue("Total");
                  row.createCell(14).setCellValue("Follow Up Notes");
                  row.createCell(15).setCellValue("Internal Status Code");
  
                  CellStyle cellStyle = book.createCellStyle();
                  cellStyle.setDataFormat(createHelper.createDataFormat().getFormat("MM/dd/yyyy"));
  
                  Statement stNotes;
                  ResultSet rsNotes;
  
                  Class.forName("com.mysql.jdbc.Driver");
  
                  conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/maintain", "root", "root");
                  stmt = conn.createStatement();
  
                  stNotes = conn.createStatement();
  
                  rs = stmt.executeQuery("SELECT b.VisitID, b.CarrierName, b.PhoneNum, b.PatientName, "
                          + "b.SubscriberID, b.SubscriberName, b.ChartNum, b.DoB, b.SubscriberEmp, "
                          + "b.ServiceDate, b.ProviderName, b.CPTCode, b.BillingDate, b.BalanceAmt "
                          + "FROM billing b INNER JOIN followup f ON b.VisitID = f.VisitID GROUP BY VisitID");
  
                  while(rs.next())    {
                      r++;
  
                      row = sheet.createRow(r);
  
                      row.createCell(0).setCellValue(rs.getString("VisitID"));
                      row.createCell(1).setCellValue(rs.getString("CarrierName"));
                      row.createCell(2).setCellValue(rs.getString("PhoneNum"));
                      row.createCell(3).setCellValue(rs.getString("PatientName"));
                      row.createCell(4).setCellValue(rs.getString("SubscriberID"));
                      row.createCell(5).setCellValue(rs.getString("SubscriberName"));
                      row.createCell(6).setCellValue(rs.getString("ChartNum"));
                      row.createCell(7).setCellValue(rs.getString("DoB"));
                      row.createCell(8).setCellValue(rs.getString("SubscriberEmp"));
  
  
                      row.createCell(9).setCellValue(rs.getString("ServiceDate"));
                      row.createCell(9).setCellStyle(cellStyle);
  
                      row.createCell(10).setCellValue(rs.getString("ProviderName"));
                      row.createCell(11).setCellValue(rs.getString("CPTCode"));
  
                      row.createCell(12).setCellValue(rs.getString("BillingDate"));
                      row.createCell(12).setCellStyle(cellStyle);
  
                      row.createCell(13).setCellValue(rs.getString("BalanceAmt"));
  
                      rsNotes = stNotes.executeQuery("SELECT Date, InternalStatusCode, FollowUpNote "
                              + "FROM followup WHERE VisitID='" + rs.getString("VisitID") + "' ORDER BY Date");
  
                      while(rsNotes.next())   {
                          row.createCell(14).setCellValue(rsNotes.getString("Date") + " - " + rsNotes.getString("FollowUpNote"));
                          row.createCell(15).setCellValue(rs.getString("VisitID"));
                      }
                  }
  
              }
              catch(ClassNotFoundException cnf) {
                  out.print("&lt;br&gt; Error : MySQL Driver not found. &lt;br&gt;");
              }
              catch(Exception ex)  {
                  out.print("Error :  &lt;br&gt;" + ex);
              }
          %&gt;
      &lt;/body&gt;
  &lt;/html&gt;
  </code></pre>
  
  <p>I'm getting this exception with Tomcat 6.0.26 :</p>
  
  <pre><code>exception
  
  org.apache.jasper.JasperException: java.lang.NullPointerException
      org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:156)
      org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:329)
      org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
      org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
      javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
      org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
  
  root cause
  
  java.lang.NullPointerException
      org.apache.jsp.GetReport_jsp.&lt;init&gt;(GetReport_jsp.java:29)
      sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
      sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
      sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
      java.lang.reflect.Constructor.newInstance(Constructor.java:513)
      java.lang.Class.newInstance0(Class.java:355)
      java.lang.Class.newInstance(Class.java:308)
      org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:145)
      org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:329)
      org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
      org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
      javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
      org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
  </code></pre>
  
  <p><strong>Did I miss something or anything wrong?</strong>
  Can anybody help me to get rid of this problem?</p>
  
  <p>Thanx in advance.</p>