您的位置:首页 > 运维架构 > Tomcat

j2ee工程(即动态网站工程Dynamic Web Project),在tomcat容器下运行时(确切说是class文件在运行时),jar包的执行顺序

2016-06-16 17:12 555 查看
j2ee工程(即动态网站工程Dynamic Web Project),在tomcat容器下运行时(确切说是class文件在运行时),jar包的执行顺序,也就是编写java文件时,文件头import的class,如:

import java.io.IOException;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

执行顺序是:

====说法1===

参考http://blog.csdn.net/kangojian/article/details/8796531

1.最先是$JAVA_HOME/jre/lib/ext/下的jar文件。

2.环境变量CLASSPATH中的jar和class文件。

3.$CATALINA_HOME/common/classes下的class文件。

4.$CATALINA_HOME/commons/endorsed下的jar文件。

5.$CATALINA_HOME/commons/i18n下的jar文件。

6.$CATALINA_HOME/common/lib 下的jar文件。

(JDBC驱动之类的jar文件可以放在这里,这样就可以避免在server.xml配置好数据源却出现找不到JDBC Driver的情况。)

7.$CATALINA_HOME/server/classes下的class文件。

8.$CATALINA_HOME/server/lib/下的jar文件。

9.$CATALINA_BASE/shared/classes 下的class文件。

10.$CATALINA_BASE/shared/lib下的jar文件。

11.各自具体的webapp /WEB-INF/classes下的class文件。

12.各自具体的webapp /WEB-INF/lib下的jar文件。

====说法2====

参考http://blog.sina.com.cn/s/blog_7a9af9b10101batx.html
1. $java_home/jre/lib 目录下的java核心api 
2. $java_home/jre/lib/ext 目录下的java扩展jar包
3. 环境变量CLASSPATH中的jar和class文件。
4. $CATALINA_HOME/common目录下按照文件夹的顺序从上往下依次加载
5. $CATALINA_HOME/server目录下按照文件夹的顺序从上往下依次加载
6. $CATALINA_BASE/shared目录下按照文件夹的顺序从上往下依次加载
7. 我们的项目路径/WEB-INF/classes下的class文件
8. 我们的项目路径/WEB-INF/lib下的jar文件
 
在同一个文件夹下,jar包是按顺序从上到下依次加载
 
由ClassLoader的双亲委托模式加载机制我们可以知道,假设两个包名和类名完全相同的class文件不再同一个jar包,如果一个class文件已经被加载java虚拟机里了,那么后面的相同的class文件就不会被加载了。例如import java.util.List,假设test1.jar中java文件夹下有个util文件夹,util文件夹下有List.class文件,test2.jar中java文件夹下也有个util文件夹,util文件夹下有List.class文件,而tomcat根据顺序先加载test1.jar,那么test2.jar就不会被加载到java虚拟机即jvm上。
===
总结下来,说法2更准确,就是:

1先读$JAVA_HOME即jdk中的jar包

2再读$CATALINA_HOME即tomcat下的jar包

3最后执行工程本身web-inf/class下的class文件和web-inf/lib下的jar包.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: