java - Why does servlet throw FileNotFoundException, while standalone application works? -
i trying open excel file using apache poi in servlet.
i have tested in basic java application, works, in servlet, i'm getting:
java.io.filenotfoundexception here index.html:
<center> <h2> <a href="excelsrv">click here</a> </h2> </center> excelgenerator.java:
package com.nody; import java.io.file; import java.io.fileinputstream; import java.io.ioexception; import java.io.printwriter; import java.util.iterator; 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.xssf.usermodel.xssfsheet; import org.apache.poi.xssf.usermodel.xssfworkbook; public class excelgenerator extends httpservlet { private static final long serialversionuid = 1l; public excelgenerator() {} protected void doget(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception { response.setcontenttype("text/html"); printwriter out=response.getwriter(); try { fileinputstream file = new fileinputstream(new file("webcontent/files/source.xlsx")); //create workbook instance holding reference .xlsx file xssfworkbook workbook = new xssfworkbook(file); //get first/desired sheet workbook xssfsheet sheet = workbook.getsheetat(0); //iterate through each rows 1 one iterator<row> rowiterator = sheet.iterator(); while (rowiterator.hasnext()) { row row = rowiterator.next(); //for each row, iterate through columns iterator<cell> celliterator = row.celliterator(); while (celliterator.hasnext()) { cell cell = celliterator.next(); //check cell type , format accordingly switch (cell.getcelltype()) { case cell.cell_type_numeric: system.out.print(cell.getnumericcellvalue() + ""); break; case cell.cell_type_string: system.out.print(cell.getstringcellvalue() + ""); break; } } system.out.println(""); } file.close(); } catch (exception e) { e.printstacktrace(); } } } web.xml:
<?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/javaee" xsi:schemalocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="webapp_id" version="2.5"> <display-name>excelgenerator</display-name> <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> <description></description> <display-name>excelgenerator</display-name> <servlet-name>excelgenerator</servlet-name> <servlet-class>com.nody.excelgenerator</servlet-class> </servlet> <servlet-mapping> <servlet-name>excelgenerator</servlet-name> <url-pattern>/excelsrv</url-pattern> </servlet-mapping> </web-app> my jar files:
dom4j-1.6.1.jar poi-3.12-beta1-20150228.jar poi-ooxml-3.12-beta1-20150228.jar poi-ooxml-schemas-3.12-beta1-20150228.jar servlet-api.jar xmlbeans-2.6.0.jar i kept excel file in webcontent/files/source.xlsx, , contains 1 column.
use
getservletcontext().getrealpath("") in case
fileinputstream file = new fileinputstream(new file(getservletcontext().getrealpath("/files/source.xlsx"))); //create workbook instance holding reference .xlsx file alternatively can use
fileinputstream file = getservletcontext().getresourceasstream("/files/source.xlsx");
Comments
Post a Comment