我在连接到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)
缺少什么?
答案 0 :(得分:3)
java.lang.ClassNotFoundException: java.sql.SQLClientInfoException
缺少什么?
准确地说:运行时类路径中缺少所提到的类。它必须在运行时类路径中作为独立的类文件(*.class
)或打包在JAR文件(*.jar
)中。或者,您也可以将其实际路径添加到运行时类路径。
默认情况下,运行时类路径包含webapp的Webapp/WEB-INF/lib
和Webapp/WEB-INF/classes
文件夹,appserver的Appserver/lib
文件夹和Java的JRE/lib
也是如此。
任何第三方特定于webapp的JAR文件都应该放在Webapp/WEB-INF/lib
中。任何特定于webapp的类(servlet等)都应该放在Webapp/WEB-INF/classes
中。任何特定于应用程序服务器(或webapp-common)的JAR文件都应该放在Appserver/lib
中。
希望这有帮助。
编辑:实际问题更严重:这确实是一个仅限Java 6的课程。 Tomcat显然是在Java 5上运行。查看您的JRE/lib
环境变量。它必须至少指向Java 6 JRE的根安装文件夹。
答案 1 :(得分:2)
这是猜测,但我看到java.sql.SQLClientInfoException是Java6中引入的类。使用什么版本的Java来启动Tomcat服务器?也许您正在使用Java6进行开发,然后部署到运行Java5的Tomcat?