日期:2014-05-19  浏览次数:20735 次

连接数据库时,驱动放置的小问题
比如连接mysql数据库(或者其他)
1:将驱动放在tomcat的lib目录下是为什么
2:   需要将驱动放在jdk/jre/lib/ext中么,为什么
3:   将驱动直接放在项目的WEB-INFO/lib中貌似可以直接运行,为什么
4:   能区别一下上面的放置位置么?
      谢谢~~~
                                                               

------解决方案--------------------
楼主看来对于JVM关于类包的装载机制不太熟悉,马上要深入理解这几个问题,不太容易,我只能先简单解释下,楼主可以再去Google详细学习下。

1:这个目录存放Tomcat自己所需的jar,所以Tomcat启动时会将其lib目录下的jar包自动引入到ClassLoader中;放在这里相当于借助Tomcat来装载我们程序所需使用的jar包;这个目录的装载级别略低于2,容易引起jar包冲突。
2:这个目录是JRE(可以简单理解为java.exe)启动时会自动装载的扩展包,其装载级别很高;也就意味着放在这里对任何Java应用都有效,但是也最容易引起jar包版本冲突。
3:装载级别最低,但是最推荐的做法;Tomcat在装载具体Web应用时,会将这个目录下的jar包作为该应用的专属jar包进行装载。


如果需要进一步理解的话,请研究:ClassLoader
------解决方案--------------------
1:将驱动放在tomcat的lib目录下是为什么 
放在tomcat\lib中 ,那么在tomcat中发布的所有项目都可以使用此驱动;
2: 需要将驱动放在jdk/jre/lib/ext中么,为什么 
放在jdk/jre/lib/ext中,在jvm启动时 ,会有jvm的扩展加载器加载 ;

3: 将驱动直接放在项目的WEB-INF/lib中貌似可以直接运行
放在 WEB-INF/lib中 ,只能给此项目使用 ;


4: 能区别一下上面的放置位置么? 

1、3应该是有jvm的应用类加载器加载 (AppClassLoader) ;
2、是由jvm的扩展类加载器加载 ;