Tomcat项目运行时加载jar包或类文件的顺序

1.在tomcat/common/lib下的jar文件,若更新或新增了,则只能重启服务器,才能重新加载jar包,使jar包生效。

2.如果application的WEB-INF/lib下的jar文件更新,则可以不重启tomcat便能使之生效,做法是修改application的Context,
修改其reloadable属性为true,(如果没有该属性就添加),该属性默认是false。  

例如:
<Context path="/myweb" docBase="D:\workplace\myweb\WebRoot"
debug="5" reloadable="true" crossContext="true"/>
当我们启动一个tomcat的服务的时候,jar包和claess文件是是以怎么样的顺序被加载进来的?
 
加载顺序:
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文件


 在同一个文件夹下,jar包是按顺序从上到下依次加载
由ClassLoader的双亲委托模式加载机制我们可以知道,假设两个包名和类名完全相同
的class文件不再同一个jar包,如果一个class文件已经被加载java虚拟机里了,
那么后面的相同的class文件就不会被加载了。

1、在tomcat根目录下新建shared/lib目录结构,将项目的jar包放在此目录下,
记得将项目下的jar包(一般在项目的WEB-INF\lib目录下)删除。
2、修改tomcat的conf目录下的catalina.properties文件,主要修改两处
1)shared.loader的值改为自己建立的共享jar包目录中所有的jar包,本例为:
shared.loader=D:/Program Files/Tomcat7/shared/lib/*.jar
2)tomcat.util.scan.DefaultJarScanner.jarsToSkip的值全部注释掉,追加*.jar。本例为:
tomcat.util.scan.DefaultJarScanner.jarsToSkip=\*.jar
效果:修改后tomcat的启动速度加快。同时防止tomcat多次加载项目中重复的jar包,造成内存移除异常。
注:实际部署的时候发现,不需要修改“tomcat.util.scan.DefaultJarScanner.jarsToSkip”的值,
修改后反而可能出错,具体原因未知。使用的时候具体情况具体分析

---------------------------------------------------------------------------------------------------------

tomcat的加载运行机制与JAVA虚拟机的父类委托机制稍有不同。 
下面来做详细叙述: 
1、首先加载Tomcat_HOME/lib目录下的jar包 
2、然后加载Tomcat_HOME/webapps/项目名/WEB-INF/lib的jar包 
3、最后加载的是Tomcat_HOME/webapps/项目名/WEB-INF/classes下的类文件 
注:本机的Tomcat_HOME为D:\Users\Administrator\Tomcat\apache-tomcat-7.0.54;

值得注意的关键是:tomcat按上述顺序依次加载资源,当后加载的资源与之前加载的资源相重时,后加载的资源会继续加载并将之前的资源覆盖。

 

转载于:https://my.oschina.net/u/2277088/blog/808886

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值