重建了我的Windows 7 PC后,我试图让Tomcat在NetBeans下运行以连接到MySQL。
我相信MySQL没问题,因为各种工具都能正确检索数据。但是当我的Java Web应用程序从NetBeans运行时,Tomcat会显示主页,但随后会出现Java空指针错误。日志告诉我这与从数据库中检索用户数据有关。所以我假设这两个系统组件无法相互通信。但为什么呢?
我的web应用程序使用的NetBeans库中有mySQLConnector。我已将MySQL Connector放在Tomcat的config文件夹中,MySQL Connector也在PC的类路径中。 Web应用程序中的context.xml文件设置为使用MySQL中的root用户,并设置MySQL中的所有相关权限。
但我一无所获!虽然我在另一台PC上使用相同的工具,但它们没问题。
有什么想法吗?有没有我错过的东西?
运行应用程序时的Apache日志是:
11-Oct-2010 11:42:15 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet IndexServlet threw exception
java.lang.NullPointerException
at visualRSS.index.Index_Servlet.doGet(Index_Servlet.java:91)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:555)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:859)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1555)
at java.lang.Thread.run(Thread.java:619)
visualRSS.index.Index_Servlet.doGet(Index_Servlet.java:91)中的行是指
User user = User_DB.get(userNo);
activeUser = Active_User_Writer.write(request, user, Valid.FALSE);
在我的代码中从数据库中获取用户。但没有...我认为这是一个配置问题,因为此代码适用于另一台PC。
从数据库中获取用户的代码如下:
// Gets a User.
public static User get(String userNo) {
ConnectionPool_DB pool = ConnectionPool_DB.getInstance();
Connection connection = pool.getConnection();
PreparedStatement ps = null;
ResultSet rs = null;
String query = ("SELECT * " +
"FROM User " +
"WHERE UserNo = ?;");
try {
System.out.println("Debug userNo: " + userNo);
ps = connection.prepareStatement(query);
ps.setString(1, userNo);
rs = ps.executeQuery();
System.out.println("Debug query: " + query);
if (rs.next()) {
User u = new User();
u.setUserNo(rs.getString("UserNo"));
...
System.out.println("Debug: get User");
return u;
}
else {
System.out.println("Debug: error");
return null;
}
}
catch(Exception ex) {
logger.error("Error getting User " + userNo + "\n", ex);
return null;
}
finally {
Database_Utils.closeResultSet(rs);
Database_Utils.closePreparedStatement(ps);
pool.freeConnection(connection);
}
}
由于
摩根先生。