tomcat 5.5 动态加载类

转载于:http://www.itxuexiwang.com/a/javadianzishu/tomcat/2016/0225/161.html?1456480735
开发使用的是tomcat5.5.27,对于WEB-INF/classes下面的类做了修改,tomcat就会就会自动重启,然后紧接着就是内存溢出。调试比较麻烦。昨天研究了一下tomcat的源代码,对类的加载机制作了一点点修改,让它动态加载类,这样调试的时候如果修改了java文件就不用重启 tomcat了。具体步骤如下:
修改WebappClassLoader.java文件中的modify()方法,
在745行的
return (true);注销,修改为:
// return (true);
//做了修改,重新装载
this.reloadresource(i);
return false;

然后添加一个对方法reloadresource的实现:
/**
* 重新装载的动作包括:
* 1。重新装载
* 2。更新最新时间
* @param i
*/
private void reloadresource(int i)throws NamingException{
String path = paths[i];
String tclassName = path.replaceAll(this.repositories[0], "");
String name = tclassName.replaceAll("/", ".").replaceAll(".class", "");

resourceEntries.remove(name);
this.findResourceInternal(name, tclassName);
System.out.println("重新加载了类文件:"+tclassName);
long lastModified =
((ResourceAttributes) resources.getAttributes(path))
.getLastModified();
lastModifiedDates[i] = lastModified;

//从这里加载的相当于多在paths和lastModifiedDates中多添加了冗余记录,需要删除最后一个
synchronized (allPermission) {
int j;
long[] result2 =
new long[lastModifiedDates.length - 1];
for (j = 0; j < (lastModifiedDates.length - 1); j++) {
result2[j] = lastModifiedDates[j];
}
lastModifiedDates = result2;

String[] result = new String[paths.length - 1];
for (j = 0; j < (paths.length - 1); j++) {
result[j] = paths[j];
}
paths = result;

}
}
这样就可以动态的由tomcat来加载类了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

手把手教你学AI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值