I am new in JSP and Java-Servlet programming.I have a task. I have to create a GUI from which a user can create a new workbook with there specified name and this workbook must be replica of a master workbook that is already stored in our local drive.And newly created workbook will be be stored on dedicated path.Most importantly my master workbook contain multiple worksheet and each sheet has multiple rows with content.So, I want that all this is copy as it is in newly created workbook.
This is my JSP Page.
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<style>
body {background-color:lightgray}
h1 {
color:blue;
font-family:verdana;
font-size:300%;
border:0px solid black;
}
p {
color:red;
font-family:courier;
font-size:160%;
}
p.special {
color:green;
font-family:courier;
font-size:100%;
}
table, th, td {
border: 0px solid black;
border-collapse: collapse;
}
th, td {
padding: 5px;
}
</style>
</head>
<body>
<h1> Welcome to the XLSX File Create GUI </h1>
<center>
<center>
<form action="ExcelCreate" method="post">
<input type="text" name="worksheetname">
<input type="submit" value="Create a Worksheet" name="worksheetcreate" />
<br></br>
</form>
</center>
</body>
</html>
And according to this my servelet is 'ExcelCreate' in package 'com.concretepage.poi' that is
package com.concretepage.poi;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.WorkbookUtil;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class ExcelCreate extends HttpServlet
{
public ExcelCreate()
{
super();
// TODO Auto-generated constructor stub
}
public Workbook workbook,new_workbook = null;
public FileInputStream fis =null;
public FileOutputStream fos=null;
public XSSFWorkbook master_workbook;
public Row master_sheet_row=null;
public Row new_workbook_row=null;
public Sheet master_workbook_Sheet;
public void init(ServletConfig config) throws ServletException
{
// TODO Auto-generated method stub
}
protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException
{
//for writing on JSP page, we have to create a Response object for writing
PrintWriter writer=response.getWriter();
//find the requested new worksheet name
String worksheetname = request.getParameter("worksheetname");
//if user input a wrong pattern Name then solve by 'safeName' variable
String safeName = WorkbookUtil.createSafeSheetName(""+worksheetname);
//Initialization
//CreationHelper createHelper = workbook.getCreationHelper();
//creating a requested new worksheet of name newworkbook
new_workbook = new XSSFWorkbook();
//Creating a String Array for storing name of sheet that extracted by master worksheet
String[] new_workbook_sheet_name_array = new String[90];
//take master XLSX file from specified location
fis=new FileInputStream(new File("D:\\eclipse\\WebContent\\Report\\Masterworkbook01.xlsx"));
master_workbook = new XSSFWorkbook (fis);
int number_Of_Sheets_in_master_workbook = master_workbook.getNumberOfSheets();
if(fis!=null)
{
//in following 'for' loop extracting master workbook all sheets name and store it in 'new_workbook_sheet_name' array
for (int i = 0; i < number_Of_Sheets_in_master_workbook; i++)
{
Sheet master_workbook_Sheet = master_workbook.getSheetAt(i);
Sheet new_workbook_sheet=master_workbook_Sheet;
new_workbook_sheet_name_array[i]=new_workbook_sheet.getSheetName();
}
//create that number of worksheet that is extracted from master workbook in new workbook and find number of rows in each Sheet
for(int k=0;k < number_Of_Sheets_in_master_workbook;k++)
{
Sheet new_workbook_sheet_name = new_workbook.createSheet(" "+new_workbook_sheet_name_array[k]);
int number_of_rows_in_master_worksheet = (master_workbook.getSheetAt(k).getLastRowNum())-(master_workbook.getSheetAt(k).getFirstRowNum());
for (int l = 0; l < number_of_rows_in_master_worksheet+1; l++)
{
master_sheet_row = master_workbook.getSheetAt(l).getRow(l);
new_workbook_row = new_workbook_sheet_name.createRow(l);
//Create a loop to fetch cell values in a row
for (short m = master_sheet_row.getFirstCellNum(); m < master_sheet_row.getLastCellNum(); m++)
{
Cell cell = new_workbook_row.createCell(m);//creating that number of cells as it is in master workbook
cell.setCellValue(master_sheet_row.getCell(m).getStringCellValue());// export values from master cell to new workbook cell
}
}
// Write the output to created file
fos = new FileOutputStream("D:\\eclipse\\Report\\"+safeName+".xlsx");
new_workbook.write(fos);
fos.close();
fis.close();
System.out.println(""+safeName+" xlsx is");writer.println(""+safeName+" xlsx is");
System.out.println("created successfully");writer.println("created successfully");
}
}
}
}
And I modify a 'web.xml' file of my 'WebContent-->WEB-INF-->web.xml' as that-
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:web="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>ExcelCreate</servlet-name>
<servlet-class>com.concretepage.poi.ExcelCreate</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ExcelCreate</servlet-name>
<url-pattern>/ExcelCreate</url-pattern>
</servlet-mapping>
</web-app>
But after all this setup when I run my server(Apache 6) it shows error 'java.lang.NullPointerException' in line 140. As I say, I am new to this. Any suggestion is appreciated.Thanks in Advance. :)
Thanks in Advance:)