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

Popular posts from this blog

cakephp - simple blog with croogo -

How to group boxplot outliers in gnuplot -

bash - Performing variable substitution in a string -