【问题标题】:JSP exception - class not found (tomcat)JSP 异常 - 找不到类 (tomcat)
【发布时间】:2009-11-13 15:29:22
【问题描述】:

我正在连接到 Postgres 数据库(在 Debian Lenny 上运行)的新 Tomcat 5.5 服务器上设置现有应用程序。当我访问它时,我会得到一系列堆栈跟踪,其根本原因如下:

java.lang.ClassNotFoundException: java.sql.SQLClientInfoException
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1363)
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1209)
    java.lang.Class.forName(libgcj.so.90)
    java.lang.Class.initializeClass(libgcj.so.90)
    java.lang.Class.initializeClass(libgcj.so.90)
    org.postgresql.Driver.makeConnection(Driver.java:382)
    org.postgresql.Driver.connect(Driver.java:260)
    java.sql.DriverManager.getConnection(libgcj.so.90)
    jof.DBConnection.getConnection(DBConnection.java:81)
    jof.BeanInterfaceBase.db(BeanInterfaceBase.java:263)
    jof.BeanInterfaceBase.getStatement(BeanInterfaceBase.java:613)
    jof.HelpInterface.findByNaturalId(HelpInterface.java:81)
    jof.HelpInterface.findByNaturalId(HelpInterface.java:128)
    org.apache.jsp.index_jsp.getHelp(index_jsp.java:162)
    org.apache.jsp.index_jsp._jspService(index_jsp.java:369)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    java.lang.reflect.Method.invoke(libgcj.so.90)
    org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:244)
    java.security.AccessController.doPrivileged(libgcj.so.90)
    javax.security.auth.Subject.doAsPrivileged(libgcj.so.90)
    org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:276)
    org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:162)

缺少什么?

【问题讨论】:

    标签: java jsp tomcat


    【解决方案1】:
    java.lang.ClassNotFoundException: java.sql.SQLClientInfoException
    

    缺少什么?

    确切地说:运行时类路径中缺少提到的类。它必须在运行时类路径中作为独立类文件 (*.class) 或打包在 JAR 文件中 (*.jar)。或者,您也可以将其实际路径添加到运行时类路径。

    默认情况下,webapp 的 Webapp/WEB-INF/libWebapp/WEB-INF/classes 文件夹被运行时类路径覆盖,appserver 的 Appserver/lib 文件夹和 Java 的 JRE/lib 也是如此。

    任何 3rd 方 webapp 特定的 JAR 文件都应该放在Webapp/WEB-INF/lib。任何特定于 webapp 的类(servlet 等)都应该放在Webapp/WEB-INF/classes 中。任何特定于 appserver(或 webapp-common)的 JAR 文件都应该放在 Appserver/lib 中。 Java 的 JRE/lib 文件夹必须保持不变。

    希望这会有所帮助。

    编辑:实际问题更糟:这确实是一个仅限 Java 6 的类。 Tomcat 显然在 Java 5 上运行。查看您的 JAVA_HOME 环境变量。它必须至少指向 Java 6 JRE 的根安装文件夹。

    【讨论】:

    • 谢谢,这很有帮助。切换运行时确实解决了问题。
    【解决方案2】:

    这是一个猜测,但我看到 java.sql.SQLClientInfoException 是 Java6 中引入的一个类。正在使用什么版本的 Java 来启动您的 Tomcat 服务器?也许您是在 Java6 下开发,然后部署到运行 Java5 的 Tomcat?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-08
      • 2011-09-13
      • 1970-01-01
      • 2015-02-01
      • 2011-06-04
      • 2012-04-12
      • 1970-01-01
      相关资源
      最近更新 更多