我初学,有些基本的概念理解不了。比如java package打包的问题,最近很受困扰。
我先说下我的思路,先写一个第三方库,导出到Jar,类似于编写的JAVA连接MYSQL那样的库能够被JSP调用(这个词也不知道合适不),index.jsp 引入package,但总会提示找不到包。我的包已经放在了Tomcat/common/lib下,引入第三方库的时候没有问题,但是自己写的就有问题。1.这个是package dbPool/dbPool.class,用ECLIPSE 导出JAR后,没有选择入口类(不知道是不是这个受到了影响)
package dbPool;
public class dbPool { public void test() {
System.out.print("this is datapool");
}
}2.下面是index.jsp的文件内容,总是提示找不到package,<%@page contentType="text/html; charset=GBK"%>
<%@page import="java.util.*" %>
<%@page import="dbPool.dbPool" %> 
<%
out.print("Today is "+new java.util.Date());
dbPool tmp = new dbPool();
tmp.test();
%>3.下面是异常
org.apache.jasper.JasperException: Unable to compile class for JSPGenerated servlet error:
C:\WATMServer\Tomcat5\work\Catalina\localhost\_\org\apache\jsp\index_jsp.java:9: package dbPool does not exist
import dbPool.*;
^
An error occurred at line: 7 in the jsp file: /index.jsp
Generated servlet error:
C:\WATMServer\Tomcat5\work\Catalina\localhost\_\org\apache\jsp\index_jsp.java:55: cannot find symbol
symbol  : class dbPool
location: class org.apache.jsp.index_jsp
dbPool tmp = new dbPool();
^
An error occurred at line: 7 in the jsp file: /index.jsp
Generated servlet error:
C:\WATMServer\Tomcat5\work\Catalina\localhost\_\org\apache\jsp\index_jsp.java:55: cannot find symbol
symbol  : class dbPool
location: class org.apache.jsp.index_jsp
dbPool tmp = new dbPool();
                 ^
3 errors org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:84)
org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:332)
org.apache.jasper.compiler.Compiler.generateClass(Compiler.java:412)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:472)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:451)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:439)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:511)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:295)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

解决方案 »

  1.   

    试一试别让包名和类名一样:
    package dbPool;
    public class dbPool {     
       public void test() {        
          System.out.print("this is datapool");    
       }
    }
      

  2.   

    另外我自己再补充一点。如果在导出的JAR选择了其他入口类,会出现not ACCESS 的提示,非常的郁闷。
      

  3.   

    找不到应该就是路径的问题。 比如你在项目中有一个Hello类
    package com.a.b;//注意包的路径
    Class Hello{
      .....
    }
    如果你想把Hello这个类导出jar包,那么首先需要编译好的类文件 Hello.class
    然后用cmd命令就可以打jar包。 比如现在Hello.class在c盘根目录
    打开cmd 进入c盘根目录:
    jar cvf hello.jar Hello.class
    如果命令是这么写的,那么你在项目中引用该jar包的时候会仍然引用不到。
    这时候应该建一个跟该类包路径一样的路径,即在c盘下新建a文件夹,再在a里建b文件夹,然后把Hello.class放到b文件夹里。
    然后cmd命令这样写:
    jar cvf hello.jar a/b/Hello.class
    这样打出的jar包就可以正常使用了。
    应该这么写:
    jar cvf hello.jar 
      

  4.   

    5楼最后一句话是多余的"应该这么写:jar cvf hello.jar "
    请忽略之。
      

  5.   

    尽管我没有按照您的方式进行操作,我现在已经找到PACKAGE了,发现ECLIPSE封装JAR包的时候经常无法编译CLASS文件。可是还有个问题。index.jsp的代码如下:
    <%@page contentType="text/html; charset=GBK"%>
    <%@page import="dbPool.*" %> 
    <%
    out.print("Today is "+new java.util.Date());
    %>
    <%dbPool tmp = new dbPool();%>
    <%tmp.test();%> //问题行tmp调用函数的时候,会出现以下异常。并百思不得其解。
    以下是java代码:package dbPool;
    //import java.util.*;
    //import java.lang.*;
    public class dbPool { public String test() {
    System.out.print("this is datapool");
    return "hello";
    }}异常信息:type Exception reportmessagedescription The server encountered an internal error () that prevented it from fulfilling this request.exceptionjavax.servlet.ServletException: dbPool.dbPool.test()Ljava/lang/String;
    org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:825)
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:758)
    org.apache.jsp.index_jsp._jspService(index_jsp.java:70)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    root causejava.lang.NoSuchMethodError: dbPool.dbPool.test()Ljava/lang/String;
    org.apache.jsp.index_jsp._jspService(index_jsp.java:63)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    note The full stack trace of the root cause is available in the Apache Tomcat/5.0.28 logs.
      

  6.   

    最后问题都解决了。我实在是想不明白。<%tmp.test();%> //问题行
    这个调用是有问题的。只有返回值,但是不显示,但不应该抛出异常,后来重启了下电脑,删掉缓存就一切正常了<%out.print(tmp.test());%>这个也不弹出异常了