Java Servlet中的PostgreSQL连接从数据库中检索信息。 得到错误

我很难完成这项工作。 我可以毫无问题地连接到数据库,但是我不能让它向我显示html页面。 它没有运行。

import java.io.*; import java.sql.*; import java.text.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; public class ShowBedrock extends HttpServlet { public String getServletInfo() { return "Servlet connects to PostgreSQL database and displays result of a SELECT"; } private Connection dbcon; // Connection for scope of ShowBedrock // "init" sets up a database connection public void init(ServletConfig config) throws ServletException { String loginUser = "postgres"; String loginPasswd = "supersecret"; String loginUrl = "jdbc:postgresql://localhost/bedrock"; // Load the PostgreSQL driver try { Class.forName("org.postgresql.Driver"); dbcon = DriverManager.getConnection(loginUrl, loginUser, loginPasswd); } catch (ClassNotFoundException ex) { System.err.println("ClassNotFoundException: " + ex.getMessage()); throw new ServletException("Class not found Error"); } catch (SQLException ex) { System.err.println("SQLException: " + ex.getMessage()); } } // Use http GET public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); // Response mime type // Output stream to STDOUT PrintWriter out = response.getWriter(); out.println("Bedrock"); out.println("

Bedrock

"); try { // Declare our statement Statement statement = dbcon.createStatement(); String query = "SELECT name, dept, "; query += " jobtitle "; query += "FROM employee "; // Perform the query ResultSet rs = statement.executeQuery(query); out.println(""); // Iterate through each row of rs while (rs.next()) { String m_name = rs.getString("name"); String m_dept = rs.getString("dept"); String m_jobtitle = rs.getString("jobtitle"); out.println("" + "" + "" + "" + ""); } out.println("
" + m_name + "" + m_dept + "" + m_jobtitle + "
"); statement.close(); } catch(Exception ex) { out.println("" + "" + "Bedrock: Error" + "\n" + "

SQL error in doGet: " + ex.getMessage() + "

"); return; } out.close(); } }

我得到以下错误,任何人都知道为什么?:

 javax.servlet.ServletException: Class not found Error ShowBedrock.init(ShowBedrock.java:42) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859) org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602) org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) java.lang.Thread.run(Unknown Source) note The full stack trace of the root cause is available in the Apache Tomcat/6.0.35 logs. 

我得到以下错误,任何人都知道为什么?

您获得该错误主体的原因是您的ClassNotFoundException处理程序丢弃了原始exception堆栈跟踪。 您正在将原始exception的消息写入System.err但(显然)不会进入正常的系统日志。 (您可能会在“catalina.out”文件中找到该消息…取决于Tomcat的配置/启动方式。)

正确的方法是链接exception; 例如

  throw new ServletException("Class not found Error", e); 

或者在你捕获它时明确记录它。 如果您明确记录它,请确保记录exception,而不仅仅是exception消息。


除非我们看到原始exception堆栈跟踪,否则我们无法告诉您问题的实际根本原因……但最可能的两个原因是:

  • 类加载器找不到所需的类; 例如,因为JAR文件不在正确的位置。
  • 在您尝试加载的类的初始化期间,某些类的类初始化失败。

Tomcat期望您的servlet将在一个包中。 你的似乎是在默认包中; 请添加一个并重新编译。 我敢打赌,那时事情会变得更好。

Tomcat 6和7希望在server / lib目录中找到JDBC JAR。 将PostgreSQL JDBC JAR添加到服务器/ lib位置。

似乎你没有将Postgresql JDBC驱动程序添加到类路径中,因为以下错误提示:

 javax.servlet.ServletException: Class not found Error 

这源于:

 throw new ServletException("Class not found Error"); 

您可以下载 Postgresql JDBC驱动程序并放入PROJECT/WEB-INF/lib文件夹。

建议

一个建议,你的exception处理是错误的,你应该改变

 throw new ServletException("Class not found Error"); 

 throw new ServletException("Class not found Error", e);