昨天在 Web 版向人紧急求助了这个问题,但没有人能够解决,没办法,毕业设计逼得我不得不转到这里来问了。起因就是我昨天在 Apache 下了 POI 包,成功加载到 Eclipse 之后,编写了一个 .java 程序成功读取出了 Excel 单元格内容,但是在 JSP 里它根本就不肯编译 POI 包!凡是调用到了涉及 POI 包 .java 程序的 JSP 页面一律无法运行!我编写的 .java 程序是这样的:public static void main(String[] args){ 
try{ 
HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream("d:/×××.xls")); 
HSSFSheet sheet = workbook.getSheet("Sheet1"); 
HSSFRow row = sheet.getRow(1); 
HSSFCell cell = row.getCell((short)1); 
System.out.println(cell.getStringCellValue()); }catch(Exception e) { 
System.out.println(e); 

} 点击运行,非常成功地显示出了 Excel 表第二行第二列的内容。但是,当我把上面这个 void 类型函数改写成返回 String 类型的函数、然后编写一个 JSP 页面调用它的时候,该 JSP 死活显示不了。最后我都怒了,只好用最简单的语句查找问题到底出在哪,于是就新建了一个 JSP,写下仅仅三行语句:<%@ page import="org.apache.poi.hssf.usermodel.*" %> 
<%@ page import="java.io.FileInputStream" %> 
<% HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream("d:/×××.xls")); %>结果一放到 Tomcat 上调试,页面上竟然显示:org.apache.jasper.JasperException: Unable to compile class for JSP也就是 JSP 拒绝编译我所导入的类!真是讽刺:我的 JSP 服务器是 Apache 的 Tomcat,它却不肯导入同样来自 Apache 家族的类?!同室操戈?!值得注意的是,我上面写的那个 .java 程序虽然运行成功了,但在编写的时候,Eclipse 给 getStringCellValue() 方法打了一条删除线,并解释该方法已经被 deprecated。我不知道这一处问题是不是正是导致 JSP 无法编译的罪魁,也不知道我下载的这个最新的 POI 类是不是本身存在缺陷(要不为什么一下载来用就被划删除线了?以前真是没见过)。

解决方案 »

  1.   

    划删除线 代表已过时或者不推荐使用,只是为兼容过去版本而保留.绝对不代表缺陷,因为肯定有新的方法或者类来替代过时的.呃...那个...HSSFWorkbook类不是没导入咩?
      

  2.   


    是说我写的那三行 JSP?org.apache.poi.hssf.usermodel.* 里已经包括 HSSFWorkbook,这个是从之前那个运行成功的 .java 程序直接照搬过来的,肯定没有错。关键是,我等了一天,也没有人给我解答:为什么这个类,Java Application 可以成功编译并执行,而 JSP 却拒绝编译?
      

  3.   

    回2楼,不好意思我看错了咩,没看到那*号.
    Unable to compile class for JSP 并不是拒绝编译.
    当jsp代码或者环境的配置中存在错误的时候,也会导致报这个错.
    不知道提示的错误除了Unable to compile class for JSP 还有没有其他的信息咩?
      

  4.   


    在这行字下面就是一大堆 org 包类报错。如果是编写一个用 POI 读取 Excel 内容、返回 String 类型函数的 .java,然后用 JSP 去引用这个 .java,报出来的错却没有写“Unable to compile class for JSP”,只是告诉你从 JSP 程序的第几行开始执行不了,也看不了哪个地方有错。首先可以肯定的是,我那三行 JSP 代码没有写错,因为只不过是导入类然后创建了一个引用,如果当中哪儿有错,Eclipse 不是划红线就是划黄线了。我也觉得应该是环境配置问题吧。在 Eclipse 开发环境中加载包这东西我懂的也不多,经常有缺步骤的地方。当时我是下载了 POI 包,得到三个 .jar,把它们放在 JDK\JRE\LIB\EXT 目录里,在“我的电脑”里把这个目录加进了 Classpath 变量,然后在 Eclipse 工程属性里头直接把这三个 .jar 作为外部类导入,然后就发现 POI 类可以导入、上面写的那个 .java 程序可以运行了。不知道如果要让 JSP 能够成功编译它,中间是否还需要加多什么流程?
      

  5.   


    不是吧,这么简单一句话都看不懂,还非得我写个程序出来不可?无非就是改成下面这个程序!还有,我是为了节省空间、免得让大伙儿看不到最关键的内容才省去 import 部分的,我既然能够在 Java Application 里执行,Eclipse 本身在没导入类的情况下各函数方法会有红线提示,难道我至于傻到写一个没有入口的程序然后去运行?public String Excel(){  
    try{  
    HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream("d:/×××.xls"));  
    HSSFSheet sheet = workbook.getSheet("Sheet1");  
    HSSFRow row = sheet.getRow(1);  
    HSSFCell cell = row.getCell((short)1);  
    String GetCell = cell.getStringCellValue();
    return GetCell;}catch(Exception e) {  
    System.out.println(e); 
    String GetCell = null;
    return GetCell; 
    }  
    }不就把 void 类型函数改成一个可供 JSP 调用的字符型函数了吗?我在 JSP 里如果写:<%@ page import=上面那个类 %>
    <% 类名 Ex = new 类名(); %>
    <% =Ex.Excel(); %>那么是没法执行的。只要一个 JSP 导入了任何跟 POI 沾边的类,一律出错。