请教各位:本菜完全照抄参考书(《开源编程精要15讲》第二章最后一个例子),用JDBC、Servlet和JSP,学着写了个有点MVC色彩的Web应用,其实就是一个网站登录功能啦。由login.jsp显示表单,用户填写后将数据转交给LoginSevlet(控制器),再转交给LoginHandler类验证,LoginHandler调用DBPool类查询数据库,验证用户名和密码是否正确,并返回查询结果。数据库是用ODBC下的Access,DBPool利用JDBC查询时的一些格式字符串放到了一个db.properties文件中。在Eclipse下运行时是没问题的,数据库查询和结果显示完全正常。只是当把这个项目发布到Tomcat下的时候,总是出现java.lang.NullPointerException异常,错误指向JDBC中的Connection对象,似乎这个数据库连接并没有正常建立,返回的是个null。这个我在Eclipse下调试的时候也遇到过,就是db.properties文件的路径没放对,放到正确的文件夹里就好了。db.properties文件的内容:DBDriver = sun.jdbc.odbc.JdbcOdbcDriver
Connection = jdbc:odbc:login
User =
Password =怀疑DBPool类有错误:public class DBPool {
String getPath() {
try {
String sDBDriver = null;
String sConnection = null;
String sUser = null;
String sPassword = null;
Properties p = new Properties();
InputStream is = getClass().getResourceAsStream("/db.properties");
p.load(is);
sDBDriver = p.getProperty("DBDriver", sDBDriver);
sConnection = p.getProperty("Connection", sConnection);
sUser = p.getProperty("User", "");
sPassword = p.getProperty("Password", "");
Properties pr = new Properties();
pr.put("user", sUser);
pr.put("password", sPassword);
pr.put("characterEncoding", "GB2312");
pr.put("userUnicode", "TRUE");
return sDBDriver;
} catch (Exception e) {
// TODO: handle exception
System.out.println(e);
//return "Error!";
}
}尤其是这一句:InputStream is = getClass().getResourceAsStream("/db.properties"); 是不是因为它的原因,在Tomcat下没能正确加载db.properties文件,导致连接不能建立?不过在网上搜了下,这个用法似乎又是没问题的。对了,我的Tomcat版本7.0,Eclipse版本3.6.1。还请各位不吝赐教!
Connection = jdbc:odbc:login
User =
Password =怀疑DBPool类有错误:public class DBPool {
String getPath() {
try {
String sDBDriver = null;
String sConnection = null;
String sUser = null;
String sPassword = null;
Properties p = new Properties();
InputStream is = getClass().getResourceAsStream("/db.properties");
p.load(is);
sDBDriver = p.getProperty("DBDriver", sDBDriver);
sConnection = p.getProperty("Connection", sConnection);
sUser = p.getProperty("User", "");
sPassword = p.getProperty("Password", "");
Properties pr = new Properties();
pr.put("user", sUser);
pr.put("password", sPassword);
pr.put("characterEncoding", "GB2312");
pr.put("userUnicode", "TRUE");
return sDBDriver;
} catch (Exception e) {
// TODO: handle exception
System.out.println(e);
//return "Error!";
}
}尤其是这一句:InputStream is = getClass().getResourceAsStream("/db.properties"); 是不是因为它的原因,在Tomcat下没能正确加载db.properties文件,导致连接不能建立?不过在网上搜了下,这个用法似乎又是没问题的。对了,我的Tomcat版本7.0,Eclipse版本3.6.1。还请各位不吝赐教!
chapter2.last.LoginHandler.checkLogin(LoginHandler.java:24)
chapter2.last.LoginServlet.doPost(LoginServlet.java:37)
javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.11 logs.
--------------------------------------------------------------------------------Apache Tomcat/7.0.11
chapter2.last.LoginHandler.checkLogin(LoginHandler.java:24)LoginHandler的第 24行报NullPointerException自己调试一下吧。这种东西没什么好说的。
pr.put("user", sUser);
pr.put("password", sPassword);
pr.put("characterEncoding", "GB2312");
pr.put("userUnicode", "TRUE");
你这里的逗号(中文标点)我个人感觉看着比较别扭,和分号英文标点有差别,如果确实是这样,那问题就在这了,中英文标点要记得切换。
字符串,选中你写的字符串看看是否有多加的空格之类的
将db.properties放在web-inf下试试
getClass().getClassLoader().getResourceAsStream("db.properties");
然后把db.properties放到classes下面
2011-09-28 14:00:57 Commons Daemon procrun stdout initializedError: java.sql.SQLException: [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序
Error: java.sql.SQLException: [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序
Error: java.sql.SQLException: [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序
Error: java.sql.SQLException: [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序