在tomcat6.0中设置jdbc数据源时,jdbc驱动要放在TOMCAT_HOME/lib目录下,绝不能放在web-inf/lib/下面:否则tomcat就会报错说找不到驱动。
猜想原因可能如下:
tomcat与java一样也是按照委托代理加载模型来实现类加载的。当某个类加载器要加载某个类的时候,它自己先不加载,而是把这个请求先交给他的父类加载器,并且把请求逐级上传。当某个类加载器的所有父类加载器都找不到请求的类的时候,这个类自己才去寻找并加载所要的类或资源。
由此我们可到当要加载一个类时,总是Bootstrap先来加载,然后再才是System,接着是common来加载。
Bootstrap
|
System
|
Common
/ /
Webapp1 Webapp2 ...
从这个类加载模型里我们还可以看到一点父类加载器是不能加载子类加载器范围内的类的。
tomcat的数据源里面用来加载jdbc驱动的是org.apache.tomcat.dbcp.dbcp.BasicDataSource。而这个类
是放在TOMCAT_HOME/lib目录下,因此如果jdbc放在了web-inf/lib/目录下就会找不到jdbc驱动了。