tomcat6 数据源链接错误Cannot create JDBC driver of class '' for connect URL 'null'

这问题已经捣鼓两天了,尝试在这碰到高手解答,先谢了
我是用vbox内装centosServer做的虚拟主机机,用samba将整个目录映射的我的主机Centos桌面版,然后用eclipse在映射的目录内工作,本来好好的,后来切换WIN8,win8当机,强制重启后,将虚拟机文件破坏,无奈重装了VBOX,结果数据源配置一直出错

org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'
at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:780)
我用的tomcat6 .mysql版本是

mysql Ver 14.14 Distrib 5.1.73, for redhat-linux-gnu (i386)
java 版本:

java version "1.7.0_51"
数据库链接的驱动:(并将其只拷贝到了/usr/share/tomcat6/lib下,将/WEB-INF/lib/下的删除了)

mysql-connector-java-5.1.29-bin.jar

配置META-INF/context.xml如下:

<Context reloadable="true">
<Resource name="jdbc/lyshwUser" auth="Container" type="javax.sql.DataSource"
username="usname" password="dbpass" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306/lyshwUser?characterEncoding=UTF-8"></Resource>
</Context>
配置WEB-INF/web.xml如下
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/lyshwUser</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
servlet代码如下:

Context ctx = new InitialContext();
ds = (DataSource) ctx.lookup("java:comp/env/jdbc/lyshwUser");
//**这里是临时加上的getConnection();
Connection con=ds.getConnection();
//只要执行上面的ds.getConnection();直接就抛出异常
百度,google了N多方法,都无效,其实tomcat6应该就配置这几个文件就可以了,还有work
/ 和conf/Catalina/localhost/ 下的文件删了N次,都不见效果,vbox虚拟
机未出问题是一只好好的,出问题后,重新搭配环境居然一直不行,郁闷了,求各位高手帮忙找下问题。
先感谢楼下两位的热心回答。
我没有修jar包。
我 说下我都 尝试过的步骤:
我先将jdbc5.1.29的jar包在两个 lib目录下都删除,结果报错空指针异常什么的,然后拷贝到web-inf/lib下一份,不报空指针异常,但还是出现老问题,然后再删除-空指针异常 。然后拷贝到tomcat6/lib目录下,没有空指针异常,这是不是说明在tomcat6/lib下,这个jar包也能工作了 ?而且我看的孙伟鑫老师的书上说数据源是由servlet管理,必须要将这个jar包拷贝到tomcat6/lib目录下(顺便提下,两个lib目录下同时存在过jdbc驱动的jar包我也试过),而且我还是过至少3个驱动的jar包,一个是3.xx的包,一个是原书带的名字就是mysqldriver.jar,原书带的版本低了,不好用。
web-inf/web.xml中的<resource-ref>标签我直接删了,报错不能绑定数据源,然后将此标签加到 /conf/web.xml 内,不报错,我将context.xml内的name改名后没有特殊的报错,此文件是用的utf-8格式,难道真的是这个文件不工作?可应该怎么改?

第1个回答  2014-05-12
那这次与之前的配置有一个不同,那就是你把 JDBC Driver 包移动了位置,对吧?那你尝试把它先移回到原来的 /WEB-INF/lib 下去再试试嘛。从原则上讲 JDBC Driver 本身就不应该放在 server 下面,而是应该在 Application 下面,或者 endorsed 目录下面,因为我们需要考虑到当你的应用程序因为驱动程序有什么 bug 而使用了特定版本的 driver 时多个程序可能使用不同版本的驱动程序,驱动程序有 bug 的问题并不少见,比如 DB2 某个版本的 type 2 驱动能正常的但 type 4 纯 java 驱动在处理一个整形字段时就有个 null pointer exception。

而放在 endorsed 目录下的目的,也就是endorsed 被设计出来的出发点是这个目录在 class loader 层次中的优先级比较低的,只有当其它地方都找不到类时才会找到这里,换句话说如果某个项目在 WEB-INF/lib 下自带了驱动程序,那么这个 endorsed 下的同类的名就不会被使用。追问

我先将jdbc5.1.29的jar包在两个 lib目录下都删除,结果报错空指针异常什么的,然后拷贝到web-inf/lib下一份,不报空指针异常,但还是出现老问题,然后再删除-空指针异常 。然后拷贝到tomcat6/lib目录下,没有空指针异常,这是不是说明在tomcat6/lib下,这个jar包也能工作了 ?而且书上说 这个驱动是由servlet管理,应在tomcat6/lib目录下

我先将jdbc5.1.29的jar包在两个 lib目录下都删除,结果报错空指针异常什么的,然后拷贝到web-inf/lib下一份,不报空指针异常,但还是出现老问题,然后再删除-空指针异常 。然后拷贝到tomcat6/lib目录下,没有空指针异常,这是不是说明在tomcat6/lib下,这个jar包也能工作了 ?而且书上说 这个驱动是由servlet管理,应在tomcat6/lib目录下

追答

哦,你是对的,我搞错了,驱动程序应该是放在服务器下的目录,不是应用程序下的。
现在你放在 tomcat6/lib 下还是有问题?

追问

是啊,真的很是无奈。不过楼下也说过,应该放到WEB-INF/lib目录里可以方便移植,而且,我尝试的操作,放在appliction目录下,没有报错,说明也工作了。现在问题还没有解决,真是让人郁闷,我又装了一套虚拟机,还是一样的结果,郁闷死了,怎么会这样?按理说像这种情况不该只我一个人发现啊,应该是普遍的问题才是。问题到底是出在哪里?
百度只能采纳一个人大答案真是有点郁闷,还是要谢谢你的帮忙

第2个回答  2014-05-12
个人感觉META-INF/context.xml里面的设置没有读进来啊,而且你是直接在mysql的jdbc驱动jar里写的吗?个人不是太喜欢这样的做法,最好不要碰官方的jar包,配置什么的写在tomcat的设置文件里更好些吧。如果一定要在jar里写,就再检查一下context.xml的字符编码等等追问

jar包 我没动的。
web-inf/web.xml中的标签我直接删了,报错不能绑定数据源,然后将此标签加到 /conf/web.xml 内,不报错,我将context.xml内的name改名后没有特殊的报错,此文件是用的utf-8格式,难道真的是这个文件不工作?可应该怎么改?

追答

可能不是太有针对性,我的几点建议:

    数据源和对它的引用都是应用程序级,不应该放到服务器的设置里,所以说你最开始的做法:<Resource/>放在META-INF/context.xml,<resource-ref/>放在WEB-INF/web.xml是最规范的做法

    jdbc驱动jar包放WEB-INF/lib,没必要放tomcat的lib里面,然后检查一下是否有多个不同版本的jar包互相冲突

    xml文件的编码,现在想想问题应该不大,因为配置都是用的英文,没有中文,不过你可以用文本编辑器打开每个用到的xml看看,确保编码和xml头部宣言的是对应的,这样比较保险

    你说你的虚拟机崩溃过,可以考虑是不是linux上的文件系统有问题,建议你用fsck之类的检查一下

    升级tomcat试试,tomcat6已经过时了,可以试试最新的7系列

追问

第2提示,应该确定没这可能,我又重装了一套vbox,还是一样。第3个提示,xml格式方面我应该确定没有错误的可能。第4提示刚出问题时就用过FSCK,不过醒觉win8当机该用windows扫描,结果是扫出了些错,但是VBOX的文件在VBOX-linux下修复了下,再在win修复了遍,结果是一塌糊涂,其实当时直接在win下扫描或许会好些。第5问题,我变态了,因为这问题太蹊跷了,我不碰南墙不回头了

追答

先在Windows下修复确保vbox相关的文件都没问题,再在vbox里对linux的文件系统修复一下吧

本回答被提问者采纳