0

这是我的 servlet 类

package com.zaggle;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class FirstServlet
 */
public class FirstServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

/**
 * @see HttpServlet#HttpServlet()
 */
public FirstServlet() {
    super();
    // TODO Auto-generated constructor stub
}

/**
 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
 */
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
}

/**
 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
 */
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    String[] data;String val=null,name;
    name=request.getParameter("excelsheet");
    System.out.println(name);
        response.setContentType("text/html");
         UploadExcel ex= new UploadExcel();
         data=ex.procedure(name);
     System.out.println(name);

    request.setAttribute("val", data);
    System.out.println(val);

    String destination="/NewFile1.jsp";
    RequestDispatcher rd=getServletContext().getRequestDispatcher(destination);
    //doGet(request, response);
    rd.forward(request, response);


}

}  

这是我在 servlet 类中使用的普通 java 类

package com.zaggle;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Vector;
import javax.swing.plaf.basic.BasicInternalFrameTitlePane.RestoreAction;
import org.apache.poi.hssf.record.formula.functions.Goto;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;



 public class UploadExcel {
public String[] procedure(String filename) {
    //  Scanner scanner = new Scanner(System.in);
      //System.out.println("Please enter a filename with extention to upload");

    String fileName = "C:\\"+filename;//+scanner.nextLine();
    String[] dataHolder = ReadCSV(fileName);
   // printCellDataToConsole(dataHolder);
    return dataHolder;
}

public static void printCellDataToConsole(Vector dataHolder) {
    // TODO Auto-generated method stub
    for(int i=0;i<dataHolder.size();i++)
    {
        Vector column=(Vector)dataHolder.elementAt(i);
        for (int j = 0; j < column.size(); j++) {
            HSSFCell myCell = (HSSFCell) column.elementAt(j);
            String stringCellValue = myCell.toString();

            System.out.print(stringCellValue + "\t");
    }
    System.out.println();

    }
}

public static String[] ReadCSV(String fileName) {
    // TODO Auto-generated method stub
     Vector cellVectorHolder = new Vector();
     String[] col = null;
     try {
         FileInputStream myInput = new FileInputStream(fileName);

         POIFSFileSystem myFileSystem = new POIFSFileSystem(myInput);

         HSSFWorkbook myWorkBook = new HSSFWorkbook(myFileSystem);

         HSSFSheet mySheet = myWorkBook.getSheetAt(0);

         Iterator rowIter = mySheet.rowIterator();

         while (rowIter.hasNext()) {
                 HSSFRow myRow = (HSSFRow) rowIter.next();
                 Iterator cellIter = myRow.cellIterator();
                 Vector column = new Vector();
                 while (cellIter.hasNext()) {
                         HSSFCell myCell = (HSSFCell) cellIter.next();
                         column.addElement(myCell);

                 }
                  col=column.toString().split(" ");
                 cellVectorHolder.addElement(column);
         }
 } catch(IOException ie)
 {
     System.err.println("Please enter a valid input");

 }
     catch (Exception e) {
         e.printStackTrace();
 }
 //return cellVectorHolder;
     return col;
}

}

当我运行时,我收到这样的错误

类型异常报告

信息

描述 服务器遇到一个内部错误 () 阻止它完成这个请求。

例外

javax.servlet.ServletException:Servlet 执行引发异常

根本原因

java.lang.NoClassDefFoundError: org/apache/poi/poifs/filesystem/POIFSFileSystem
com.zaggle.UploadExcel.ReadCSV(UploadExcel.java:52)
com.zaggle.UploadExcel.procedure(UploadExcel.java:24)
com.zaggle.FirstServlet.doPost(FirstServlet.java:42)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

为什么我会收到此错误。谁能帮我?

4

4 回答 4

3

您似乎忘记在其中包含POICLASSPATH(例如,您的 Web 应用程序没有引用它)。您可以将此库包含在WEB-INF/lib(在您的 WAR 存档中或以展开的目录格式中),或者它可以位于您的应用程序server/web服务器的其他位置CLASSPATH

于 2012-10-17T06:53:47.047 回答
1

你在这一行得到了例外

POIFSFileSystem myFileSystem = new POIFSFileSystem(myInput);

您正在尝试使用项目中未包含的库。确保该import org.apache.poi库在web-inf/lib目录中

于 2012-10-17T06:54:07.653 回答
1

您的 POI jar 不在类路径中。您可以在WEB-INF/lib 下包含此库。.

还要检查您的 jar 版本是否与预期的不同。

于 2012-10-17T06:54:09.950 回答
1

确保apache-poi.jar在 WEB-INF/lib 下。

可选:根据您的 Web 服务器或应用程序服务器,放入apache-poi.jar/ server-homelib(取决于服务器)。这不是最好的解决方案。


笔记

现在,您正在开发 Web 应用程序,不要使用具有特定路径的上传文件(例如:C:\....)。如果是这样,程序会发现本地机器上的上传文件Web Server正在运行。首先,您必须将文件上传为byte[]InputStream使用其他第三方库。在那之后,你必须改变HSSFWorkbook

于 2012-10-17T07:03:20.963 回答