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

来源:互联网 发布:java医疗管理系统 编辑:程序博客网 时间:2024/05/29 08:59

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包.


0 0
原创粉丝点击