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

解决方案 »

  1.   

    楼主看来对于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
      

  2.   

    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的扩展类加载器加载 ;
      

  3.   

    tomcat\lib
    由tomcat类加载器所在的包为: 
    org.apache.catalina.loader 
    而其中就有.WebappClassLoader 
      

  4.   

    加载顺序: 1. $java_home/lib 目录下的java核心api 2. $java_home/lib/ext 目录下的java扩展jar包3. java -classpath/-Djava.class.path所指的目录下的类与jar包4. $CATALINA_HOME/common目录下按照文件夹的顺序从上往下依次加载5. $CATALINA_HOME/server目录下按照文件夹的顺序从上往下依次加载6. $CATALINA_BASE/shared目录下按照文件夹的顺序从上往下依次加载7. 项目路径/WEB-INF/classes下的class文件8. 项目路径/WEB-INF/lib下的jar文件