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包.
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包.
相关文章推荐
- tomcat服务器的搭建及介绍
- tomcat内存溢出
- Tomcat 部署详解
- 输入ip访问tomcat首页
- JVM每小时执行一次FULL GC问题
- tomcat配置解决中文乱码
- Linux下Tomcat的启动、关闭、杀死进程
- windows 下 tomcat 内存设置(处理tomcat 内存溢出异常)
- Apache和Tomcat之间请求处理
- 解决:Tomcat 局域网IP地址 访问不了
- tomcat内存溢出之PermGen space
- Linux迁移tomcat所在目录路径
- Linux下安装启动多个Tomcat的配置
- 手机通过USB访问电脑部署tomcat应用
- eclipse远程调试tomcat
- 单台主机nginx+tomcat+mencached部署测试
- Ubuntu14.04安装和配置Tomcat7
- Eclipse调整tomcat插件内存方法,以便可以同时部署多个项目
- javaweb上传文件时在tomcat配置虚拟路径
- tomcat修改默认主页