转载于: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来加载类了。
分享到:
相关推荐
1. Context配置:在`server.xml`中,每个`<Context>`元素代表一个Web应用程序,定义了应用的根路径、类加载器、session配置等。 2. Web应用部署:Web应用程序通常以WAR(Web ARchive)格式打包,只需将其放入`...
10. **监控与管理**:Tomcat提供了一个名为Manager的Web应用,允许管理员通过浏览器管理部署的应用,包括启动、停止、重新加载和删除应用。 总的来说,Tomcat 5.5作为一个轻量级应用服务器,适合小型项目或开发环境...
在`$CATALINA_HOME/conf/server.xml`的`GlobalNamingResources`元素内,添加对`dbcp-config.xml`的引用,以便Tomcat能识别并加载数据源: ```xml <!-- Edit the file at /path/to/tomcat/conf/Catalina/localhost...
【标题】:"axis2+Tomcat5.5+Eclipse3.3" 实例解析 【描述】:本文将深入探讨如何使用axis2、Tomcat5.5和Eclipse3.3来部署和访问Web服务,这是一份适用于初学者的学习指南。 【标签】:"webservice" "axis2" 在...
Tomcat 5.5在启动时,会尝试加载所有部署的应用程序。如果某个应用的类库或资源文件存在问题,比如缺少必要的JAR包、配置错误或是版本不兼容,都可能导致Tomcat启动失败。开发者需检查应用的`WEB-INF/lib`目录下的...
4. **管理工具**:Tomcat提供了一套基于Web的管理界面,名为`Manager App`,允许管理员部署、卸载、重新加载或启动/停止应用。此外,还有一个`Host Manager`用于管理虚拟主机。 5. **安全特性**:Tomcat支持基本的...
这个驱动包通常包含一个名为`ojdbc.jar`的文件,它包含了所有必要的类和资源,使得Tomcat可以识别并连接到Oracle数据库。 安装Oracle驱动包的步骤如下: 1. **下载驱动包**:首先,你需要从Oracle官方网站或可靠的...
4. **编译类无需重启**:嵌入式Tomcat5.5能够自动检测类文件的变化,并自动重新加载,这样在开发过程中,当修改了Java源码并编译后,无需手动重启服务器,应用就能自动使用新的类。 5. **开发专用**:嵌入式Tomcat...
9. **资源加载优化**:Tomcat 5.5允许开发者通过类路径或文件系统上的特定位置加载资源,增强了资源管理的灵活性。 10. **日志系统**:Tomcat 5.5使用`catalina.out`记录启动和运行时的日志,方便问题排查和诊断。 ...
标题和描述中提到的"tomcat5.5"是指Apache Tomcat 5.5版本,这是一个流行的开源Java Servlet容器,用于部署和运行Java Web应用程序。它遵循Java EE规范,特别是Servlet和JSP标准。Tomcat以其轻量级、高效和易用性而...
《Tomcat5.5 API》是针对Apache Tomcat 5.5版本的API文档,它为开发者提供了详尽的接口信息和使用指南。Tomcat是一个开源的Java Servlet容器,广泛用于构建和部署Java Web应用程序。这个API文档是开发人员理解和使用...
`org.apache.catalina.startup`包包含启动Tomcat时的部署逻辑,例如`Tomcat`类用于加载和解析`context.xml`和`server.xml`配置文件。理解这部分源码有助于定制部署过程。 8. **错误处理和日志系统**: Tomcat使用...
- ** Catalina目录**:存放了Tomcat的核心组件,如Catalina类加载器,以及与特定主机相关的配置。 - **webapps目录**:部署Web应用程序的地方,将WAR文件或解压后的目录放在此处即可自动部署。 - **logs目录**:...
这个“Mirror of Apache Tomcat 5.5.x.zip”文件很可能是Apache Tomcat 5.5版本的一个镜像,包含了该版本的所有组件和必要的配置文件。Apache Tomcat 5.5是在2006年发布的,虽然现在已经过时,但仍有用户可能出于...
lib目录中的JAR文件会被自动加载到服务器的类路径中。 3. 在你的Web应用的WEB-INF目录下创建一个名为web.xml的配置文件,如果没有的话。在这个文件中,你需要配置JSTL的标签库描述符。例如: ```xml ... ...
【Tomcat5.5数据源配置详解】 在Java Web开发中,Tomcat作为轻量级应用服务器,常常被用于部署Web应用程序。为了连接数据库,我们需要配置数据源(DataSource)。本篇将详细介绍如何在Tomcat 5.5版本中配置数据源,...
首先,你需要下载C3P0的jar包,将其添加到Tomcat的lib目录下,确保Tomcat在运行时可以加载到这个库。C3P0的最新版本可以在官方网站上找到。 接着,我们需要在Tomcat的conf/server.xml文件中配置数据源(DataSource...
在Tomcat 5.5环境下,为了使Struts能够正常工作,需要将上述jar包复制到Tomcat的`lib`目录下,或者直接在应用的`WEB-INF/lib`目录下放置,这样它们会在应用启动时被自动加载。这样做可以确保应用运行时能够找到所有...
这些脚本会执行一些初始化任务,包括设置环境变量、加载JVM参数、初始化类加载器以及启动服务器。 问题可能出现在以下几个方面: 1. **环境变量配置**:确保`JAVA_HOME`和`CATALINA_HOME`环境变量已正确设置。`...
本实例将通过Eclipse 3.2集成开发环境、Tomcat 5.5应用服务器以及SQL Server 2000数据库来演示如何实现这一功能。 首先,我们需要在Eclipse 3.2中创建一个Java Web项目。Eclipse作为一款强大的Java IDE,提供了便捷...